📄 com_mod_mgmt.h
字号:
#ifndef __MV_MODULE_MGMT__#define __MV_MODULE_MGMT__#include "com_define.h"#include "com_type.h"#include "com_util.h"enum { /* module status (module_descriptor) */ MV_MOD_VOID = 0, MV_MOD_UNINIT, MV_MOD_REGISTERED, /* module ops pointer registered */ MV_MOD_INITED, /* resource assigned */ MV_MOD_FUNCTIONAL, MV_MOD_STARTED, MV_MOD_DEINIT, /* extension released, be gone soon */ MV_MOD_GONE,};/* Resource type */enum Resource_Type { RESOURCE_CACHED_MEMORY = 1, RESOURCE_UNCACHED_MEMORY,};/* adapter descriptor */struct mv_adp_desc { struct list_head hba_entry; struct list_head online_module_list; spinlock_t lock; /* adapter information */ MV_U8 Adapter_Bus_Number; MV_U8 Adapter_Device_Number; MV_U16 Vendor_Id; MV_U16 Device_Id; MV_U8 Revision_Id; MV_U8 id; /* multi-hba support, start from 0 */ MV_U32 pad0; MV_U16 pad1; MV_U8 pad2; MV_U8 running_mod_num;/* number of up & running modules */ /* System resource */ MV_PVOID Base_Address[ROUNDING(MAX_BASE_ADDRESS, 2)]; MV_U32 max_io;#ifdef _OS_LINUX dev_t dev_no; struct pci_dev *dev; MV_PVOID extension; /* hba_ext */#endif /* _OS_LINUX */};struct mv_mod_desc;struct mod_notif_param { MV_PVOID p_param; MV_U32 hi; MV_U32 lo; /* for event processing */ MV_U32 event_id; MV_U16 dev_id; MV_U8 severity_lvl; MV_U8 param_count;};struct mv_mod_res { struct list_head res_entry; MV_PHYSICAL_ADDR bus_addr; MV_PVOID virt_addr; MV_U32 size; MV_U16 type; /* enum Resource_Type */ MV_U16 align;};typedef struct _Module_Interface{ MV_U8 module_id; MV_U32 (*get_res_desc)(enum Resource_Type type, MV_U16 maxIo); MV_VOID (*module_initialize)(struct mv_mod_desc *mod_desc, MV_U32 size, MV_U16 max_io); MV_VOID (*module_start)(MV_PVOID extension); MV_VOID (*module_stop)(MV_PVOID extension); MV_VOID (*module_notification)(MV_PVOID extension, enum Module_Event event, struct mod_notif_param *param); MV_VOID (*module_sendrequest)(MV_PVOID extension, PMV_Request pReq); MV_VOID (*module_reset)(MV_PVOID extension); MV_VOID (*module_monitor)(MV_PVOID extension); MV_BOOLEAN (*module_service_isr)(MV_PVOID extension);#ifdef RAID_DRIVER MV_VOID (*module_send_xor_request)(MV_PVOID This, PMV_XOR_Request pXORReq);#endif /* RAID_DRIVER */} Module_Interface, *PModule_Interface;#define mv_module_ops _Module_Interface#define mv_set_mod_ops(_ops, _id, _get_res_desc, _init, _start, \ _stop, _send, _reset, _mon, _send_eh, _isr, _xor) \ { \ _ops->id = id; \ _ops->get_res_desc = _get_res_desc; \ _ops->module_initialize = _init; \ _ops->module_start = _start; \ _ops->module_stop = _stop; \ _ops->module_sendrequest = _send; \ _ops->module_reset = _reset; \ _ops->module_monitor = _mon; \ _ops->module_send_eh_request = _send_eh; \ _ops->module_service_isr = _isr; \ _ops->module_send_xor_request = _xor; \ }/* module descriptor */struct mv_mod_desc { struct list_head mod_entry; /* kept in a list */ struct mv_mod_desc *parent; struct mv_mod_desc *child; MV_U32 extension_size; MV_U8 status; MV_U8 ref_count; MV_U8 module_id; MV_U8 res_entry; MV_PVOID extension; /* module extention */ struct mv_module_ops *ops; /* interface operations */ struct mv_adp_desc *hba_desc; struct list_head res_list;};#endif /* __MV_MODULE_MGMT__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -