Merge branch 'for-linus' of git://git.kernel.dk/linux-block
[pandora-kernel.git] / drivers / staging / mei / mei_dev.h
index 6f3ec06..d7bc10c 100644 (file)
@@ -61,11 +61,6 @@ extern const u8 mei_wd_state_independence_msg[3][4];
  */
 #define  MEI_MAX_OPEN_HANDLE_COUNT     253
 
-/*
- * Number of queue lists used by this driver
- */
-#define MEI_IO_LISTS_NUMBER        7
-
 /*
  * Number of Maximum MEI Clients
  */
@@ -169,7 +164,6 @@ struct mei_cl {
 struct mei_io_list {
        struct mei_cl_cb mei_cb;
        int status;
-       struct mei_device *device_extension;
 };
 
 /* MEI private device struct */
@@ -179,7 +173,6 @@ struct mei_device {
         * lists of queues
         */
         /* array of pointers to aio lists */
-       struct mei_io_list *io_list_array[MEI_IO_LISTS_NUMBER];
        struct mei_io_list read_list;           /* driver read queue */
        struct mei_io_list write_list;          /* driver write queue */
        struct mei_io_list write_waiting_list;  /* write waiting queue */
@@ -193,6 +186,7 @@ struct mei_device {
         * list of files
         */
        struct list_head file_list;
+       long open_handle_count;
        /*
         * memory of device
         */
@@ -203,8 +197,8 @@ struct mei_device {
         * lock for the device
         */
        struct mutex device_lock; /* device lock */
-       int recvd_msg;
        struct delayed_work wd_work;    /* watch dog deleye work */
+       bool recvd_msg;
        /*
         * hw states of host and fw(ME)
         */
@@ -222,7 +216,8 @@ struct mei_device {
        enum mei_states mei_state;
        enum mei_init_clients_states init_clients_state;
        u16 init_clients_timer;
-       int stop;
+       bool stop;
+       bool need_reset;
 
        u32 extra_write_index;
        u32 rd_msg_buf[128];    /* used for control messages */
@@ -232,81 +227,105 @@ struct mei_device {
 
        struct hbm_version version;
 
-       int mei_host_buffer_is_empty;
-       struct mei_cl wd_cl;
        struct mei_me_client *me_clients; /* Note: memory has to be allocated */
        DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
        DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
-       u8 num_mei_me_clients;
+       u8 me_clients_num;
        u8 me_client_presentation_num;
        u8 me_client_index;
+       bool mei_host_buffer_is_empty;
 
-       int wd_pending;
-       int wd_stopped;
+       struct mei_cl wd_cl;
+       bool wd_pending;
+       bool wd_stopped;
+       bool wd_bypass; /* if false, don't refresh watchdog ME client */
        u16 wd_timeout; /* seconds ((wd_data[1] << 8) + wd_data[0]) */
+       u16 wd_due_counter;
        unsigned char wd_data[MEI_START_WD_DATA_SIZE];
 
 
-       u16 wd_due_counter;
-       bool wd_bypass; /* if false, don't refresh watchdog ME client */
 
        struct file *iamthif_file_object;
        struct mei_cl iamthif_cl;
-       int iamthif_ioctl;
-       int iamthif_canceled;
+       struct mei_cl_cb *iamthif_current_cb;
        int iamthif_mtu;
        unsigned long iamthif_timer;
        u32 iamthif_stall_timer;
        unsigned char *iamthif_msg_buf; /* Note: memory has to be allocated */
        u32 iamthif_msg_buf_size;
        u32 iamthif_msg_buf_index;
-       int iamthif_flow_control_pending;
        enum iamthif_states iamthif_state;
-       struct mei_cl_cb *iamthif_current_cb;
-       u8 write_hang;
-       int need_reset;
-       long open_handle_count;
-
+       bool iamthif_flow_control_pending;
+       bool iamthif_ioctl;
+       bool iamthif_canceled;
 };
 
 
 /*
  * mei init function prototypes
  */
-struct mei_device *init_mei_device(struct pci_dev *pdev);
+struct mei_device *mei_device_init(struct pci_dev *pdev);
 void mei_reset(struct mei_device *dev, int interrupts);
 int mei_hw_init(struct mei_device *dev);
 int mei_task_initialize_clients(void *data);
 int mei_initialize_clients(struct mei_device *dev);
-struct mei_cl *mei_alloc_file_private(struct mei_device *dev);
 int mei_disconnect_host_client(struct mei_device *dev, struct mei_cl *cl);
-void mei_initialize_list(struct mei_io_list *list,
-                         struct mei_device *dev);
-void mei_flush_list(struct mei_io_list *list, struct mei_cl *cl);
-void mei_flush_queues(struct mei_device *dev, struct mei_cl *cl);
-void mei_remove_client_from_file_list(struct mei_device *dev,
-                                      u8 host_client_id);
-void host_init_iamthif(struct mei_device *dev);
-void mei_init_file_private(struct mei_cl *priv, struct mei_device *dev);
-void allocate_me_clients_storage(struct mei_device *dev);
-
-void host_start_message(struct mei_device *dev);
-void host_enum_clients_message(struct mei_device *dev);
-void host_client_properties(struct mei_device *dev);
+void mei_remove_client_from_file_list(struct mei_device *dev, u8 host_client_id);
+void mei_host_init_iamthif(struct mei_device *dev);
+void mei_allocate_me_clients_storage(struct mei_device *dev);
+
 
 u8 mei_find_me_client_update_filext(struct mei_device *dev,
                                struct mei_cl *priv,
                                const uuid_le *cguid, u8 client_id);
 
 /*
- *  interrupt functions prototype
+ * MEI IO List Functions
+ */
+void mei_io_list_init(struct mei_io_list *list);
+void mei_io_list_flush(struct mei_io_list *list, struct mei_cl *cl);
+
+/*
+ * MEI ME Client Functions
+ */
+
+struct mei_cl *mei_cl_allocate(struct mei_device *dev);
+void mei_cl_init(struct mei_cl *cl, struct mei_device *dev);
+int mei_cl_flush_queues(struct mei_cl *cl);
+/**
+ * mei_cl_cmp_id - tells if file private data have same id
+ *
+ * @fe1: private data of 1. file object
+ * @fe2: private data of 2. file object
+ *
+ * returns true  - if ids are the same and not NULL
+ */
+static inline bool mei_cl_cmp_id(const struct mei_cl *cl1,
+                               const struct mei_cl *cl2)
+{
+       return cl1 && cl2 &&
+               (cl1->host_client_id == cl2->host_client_id) &&
+               (cl1->me_client_id == cl2->me_client_id);
+}
+
+
+
+/*
+ * MEI Host Client Functions
+ */
+void mei_host_start_message(struct mei_device *dev);
+void mei_host_enum_clients_message(struct mei_device *dev);
+void mei_host_client_properties(struct mei_device *dev);
+
+/*
+ *  MEI interrupt functions prototype
  */
 irqreturn_t mei_interrupt_quick_handler(int irq, void *dev_id);
-irqreturn_t  mei_interrupt_thread_handler(int irq, void *dev_id);
+irqreturn_t mei_interrupt_thread_handler(int irq, void *dev_id);
 void mei_wd_timer(struct work_struct *work);
 
 /*
- *  input output function prototype
+ *  MEI input output function prototype
  */
 int mei_ioctl_connect_client(struct file *file,
                        struct mei_connect_client_data *data);
@@ -321,7 +340,7 @@ int amthi_read(struct mei_device *dev, struct file *file,
 struct mei_cl_cb *find_amthi_read_list_entry(struct mei_device *dev,
                                                struct file *file);
 
-void run_next_iamthif_cmd(struct mei_device *dev);
+void mei_run_next_iamthif_cmd(struct mei_device *dev);
 
 void mei_free_cb_private(struct mei_cl_cb *priv_cb);
 
@@ -339,8 +358,7 @@ int mei_find_me_client_index(const struct mei_device *dev, uuid_le cuuid);
  *
  * returns the byte read.
  */
-static inline u32 mei_reg_read(struct mei_device *dev,
-                               unsigned long offset)
+static inline u32 mei_reg_read(struct mei_device *dev, unsigned long offset)
 {
        return ioread32(dev->mem_addr + offset);
 }
@@ -404,19 +422,4 @@ void mei_csr_clear_his(struct mei_device *dev);
 void mei_enable_interrupts(struct mei_device *dev);
 void mei_disable_interrupts(struct mei_device *dev);
 
-/**
- * mei_fe_same_id - tells if file private data have same id
- *
- * @fe1: private data of 1. file object
- * @fe2: private data of 2. file object
- *
- * returns !=0 - if ids are the same, 0 - if differ.
- */
-static inline int mei_fe_same_id(const struct mei_cl *fe1,
-                                 const struct mei_cl *fe2)
-{
-       return ((fe1->host_client_id == fe2->host_client_id) &&
-               (fe1->me_client_id == fe2->me_client_id));
-}
-
 #endif