#ifndef _QL_INIT_H
#define _QL_INIT_H
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t ql_task_cb_dly;
typedef struct nvram {
uint8_t id[4];
uint8_t nvram_version;
uint8_t reserved_0;
uint8_t parameter_block_version;
uint8_t reserved_1;
uint8_t firmware_options[2];
uint8_t max_frame_length[2];
uint8_t max_iocb_allocation[2];
uint8_t execution_throttle[2];
uint8_t login_retry_count;
uint8_t retry_delay;
uint8_t port_name[8];
uint8_t hard_address[2];
uint8_t inquiry;
uint8_t login_timeout;
uint8_t node_name[8];
uint8_t add_fw_opt[2];
uint8_t response_accumulation_timer;
uint8_t interrupt_delay_timer;
uint8_t special_options[2];
uint8_t reserved_4[26];
uint8_t host_p[2];
uint8_t boot_node_name[8];
uint8_t boot_lun_number;
uint8_t reset_delay;
uint8_t port_down_retry_count;
uint8_t reserved_5;
uint8_t maximum_luns_per_target[2];
uint8_t reserved_6[14];
uint8_t reverved_7[12];
uint8_t adapInfo[16];
uint8_t reserved_8[22];
uint8_t reserved_9[50];
uint8_t reserved_10[32];
uint8_t adapter_features[2];
uint8_t reserved_11[6];
uint8_t reserved_12[4];
uint8_t subsystem_vendor_id[2];
uint8_t reserved_13[2];
uint8_t subsystem_device_id[2];
uint8_t subsystem_vendor_id_2200[2];
uint8_t subsystem_device_id_2200[2];
uint8_t reserved_14;
uint8_t checksum;
} nvram_t;
typedef struct nvram_24xx {
uint8_t id[4];
uint8_t nvram_version[2];
uint8_t reserved_0[2];
uint8_t version[2];
uint8_t reserved_1[2];
uint8_t max_frame_length[2];
uint8_t execution_throttle[2];
uint8_t exchange_count[2];
uint8_t hard_address[2];
uint8_t port_name[8];
uint8_t node_name[8];
uint8_t login_retry_count[2];
uint8_t link_down_on_nos[2];
uint8_t interrupt_delay_timer[2];
uint8_t login_timeout[2];
uint8_t firmware_options_1[4];
uint8_t firmware_options_2[4];
uint8_t firmware_options_3[4];
union {
struct {
uint8_t swing_opt[2];
uint8_t swing_1g[2];
uint8_t swing_2g[2];
uint8_t swing_4g[2];
uint8_t reserved[32];
} isp2400;
struct {
uint8_t swing_opt[4];
uint8_t tx_8g[4];
uint8_t tx_4g[4];
uint8_t tx_2g[4];
uint8_t rx_limit_8g[4];
uint8_t rx_limit_4g[4];
uint8_t rx_limit_2g[4];
uint8_t rx_linear_8g[4];
uint8_t rx_linear_4g[4];
uint8_t rx_linear_2g[4];
} isp2500;
struct {
uint8_t reserved[8];
uint8_t e_node_mac_addr[6];
uint8_t reserved2[26];
} isp8001;
} fw;
uint8_t oem_specific;
uint8_t reserved_4[15];
uint8_t execute_fw_options[2];
uint8_t reserved_5[14];
ql_ext_icb_8100_t ext_blk;
uint8_t reserved_6[32];
uint8_t reserved_7[32];
uint8_t host_p[4];
uint8_t alternate_port_name[8];
uint8_t alternate_node_name[8];
uint8_t boot_port_name[8];
uint8_t boot_lun_number[2];
uint8_t reserved_8[2];
uint8_t alt1_boot_port_name[8];
uint8_t alt1_boot_lun_number[2];
uint8_t reserved_9[2];
uint8_t alt2_boot_port_name[8];
uint8_t alt2_boot_lun_number[2];
uint8_t reserved_10[2];
uint8_t alt3_boot_port_name[8];
uint8_t alt3_boot_lun_number[2];
uint8_t reserved_11[2];
uint8_t efi_parameters[4];
uint8_t reset_delay;
uint8_t reserved_12;
uint8_t reserved_13[2];
uint8_t boot_id_number[2];
uint8_t reserved_14[2];
uint8_t max_luns_per_target[2];
uint8_t reserved_15[2];
uint8_t port_down_retry_count[2];
uint8_t link_down_timeout[2];
uint8_t fcode_p0;
uint8_t reserved_16[7];
uint8_t mac_address[6];
uint8_t clp_flag[2];
uint8_t reserved_18[24];
uint8_t def_port_name[8];
uint8_t def_node_name[8];
uint8_t clp_flag1[2];
uint8_t clp_flag2[2];
uint8_t default_firmware_options[2];
uint8_t enhanced_features[2];
uint8_t serdes_index[2];
uint8_t reserved_19[6];
uint8_t alt4_boot_port_name[8];
uint8_t alt4_boot_lun_number[2];
uint8_t reserved_20[2];
uint8_t alt5_boot_port_name[8];
uint8_t alt5_boot_lun_number[2];
uint8_t reserved_21[2];
uint8_t alt6_boot_port_name[8];
uint8_t alt6_boot_lun_number[2];
uint8_t reserved_22[2];
uint8_t alt7_boot_port_name[8];
uint8_t alt7_boot_lun_number[2];
uint8_t reserved_23[2];
uint8_t reserved_24[12];
uint8_t fw_table_offset[2];
uint8_t fw_table_sig[2];
int8_t model_name[4];
int8_t model_name1[12];
uint8_t feature_mask_l[2];
uint8_t feature_mask_h[2];
uint8_t reserved_25[4];
uint8_t subsystem_vendor_id[2];
uint8_t subsystem_device_id[2];
uint8_t checksum[4];
} nvram_24xx_t;
#define QL_2200_FW_DUMP_SIZE 0x100000
#define QL_2300_FW_DUMP_SIZE 0x100000
#define QL_6322_FW_DUMP_SIZE 0x100000
#define QL_24XX_FW_DUMP_SIZE 0x300000
#define QL_25XX_FW_DUMP_SIZE 0x400000
#define QL_81XX_FW_DUMP_SIZE 0x400000
#define QL_27XX_FW_DUMP_SIZE 0x600000
#define QL_83XX_FW_DUMP_SIZE 0x400000
#define QL_24XX_VPD_SIZE 0x200
#define QL_24XX_SFP_SIZE 0x200
typedef struct ql_fw_dump {
uint16_t pbiu_reg[8];
uint16_t risc_host_reg[8];
uint16_t mailbox_reg[16];
uint16_t resp_dma_reg[32];
uint16_t dma_reg[48];
uint16_t risc_hdw_reg[16];
uint16_t risc_gp0_reg[16];
uint16_t risc_gp1_reg[16];
uint16_t risc_gp2_reg[16];
uint16_t risc_gp3_reg[16];
uint16_t risc_gp4_reg[16];
uint16_t risc_gp5_reg[16];
uint16_t risc_gp6_reg[16];
uint16_t risc_gp7_reg[16];
uint16_t frame_buf_hdw_reg[64];
uint16_t fpm_b0_reg[64];
uint16_t fpm_b1_reg[64];
uint16_t risc_ram[0xf800];
uint16_t stack_ram[0x800];
uint16_t data_ram[0xf800];
uint32_t req_q[REQUEST_QUEUE_SIZE / 4];
uint32_t rsp_q[RESPONSE_QUEUE_SIZE / 4];
} ql_fw_dump_t;
typedef struct ql_24xx_fw_dump {
uint32_t hccr;
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
uint32_t xseq_0_reg[16];
uint32_t xseq_1_reg[16];
uint32_t rseq_gp_reg[128];
uint32_t rseq_0_reg[16];
uint32_t rseq_1_reg[16];
uint32_t rseq_2_reg[16];
uint32_t cmd_dma_reg[16];
uint32_t req0_dma_reg[15];
uint32_t resp0_dma_reg[15];
uint32_t req1_dma_reg[15];
uint32_t xmt0_dma_reg[32];
uint32_t xmt1_dma_reg[32];
uint32_t xmt2_dma_reg[32];
uint32_t xmt3_dma_reg[32];
uint32_t xmt4_dma_reg[32];
uint32_t xmt_data_dma_reg[16];
uint32_t rcvt0_data_dma_reg[32];
uint32_t rcvt1_data_dma_reg[32];
uint32_t risc_gp_reg[128];
uint32_t shadow_reg[7];
uint32_t lmc_reg[112];
uint32_t fpm_hdw_reg[192];
uint32_t fb_hdw_reg[176];
uint32_t code_ram[0x2000];
uint32_t req_q[REQUEST_QUEUE_SIZE / 4];
uint32_t rsp_q[RESPONSE_QUEUE_SIZE / 4];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
uint32_t ext_mem[1];
} ql_24xx_fw_dump_t;
typedef struct ql_25xx_fw_dump {
uint32_t hccr;
uint32_t r2h_status;
uint32_t aer_ues;
uint32_t hostrisc_reg[32];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
uint32_t xseq_0_reg[48];
uint32_t xseq_1_reg[16];
uint32_t rseq_gp_reg[128];
uint32_t rseq_0_reg[32];
uint32_t rseq_1_reg[16];
uint32_t rseq_2_reg[16];
uint32_t aseq_gp_reg[128];
uint32_t aseq_0_reg[32];
uint32_t aseq_1_reg[16];
uint32_t aseq_2_reg[16];
uint32_t cmd_dma_reg[16];
uint32_t req0_dma_reg[15];
uint32_t resp0_dma_reg[15];
uint32_t req1_dma_reg[15];
uint32_t xmt0_dma_reg[32];
uint32_t xmt1_dma_reg[32];
uint32_t xmt2_dma_reg[32];
uint32_t xmt3_dma_reg[32];
uint32_t xmt4_dma_reg[32];
uint32_t xmt_data_dma_reg[16];
uint32_t rcvt0_data_dma_reg[32];
uint32_t rcvt1_data_dma_reg[32];
uint32_t risc_gp_reg[128];
uint32_t shadow_reg[11];
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[192];
uint32_t fb_hdw_reg[192];
uint32_t code_ram[0x2000];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
uint32_t req_q_size[2];
uint32_t rsp_q_size;
uint32_t req_rsp_ext_mem[1];
} ql_25xx_fw_dump_t;
typedef struct ql_81xx_fw_dump {
uint32_t hccr;
uint32_t r2h_status;
uint32_t aer_ues;
uint32_t hostrisc_reg[32];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
uint32_t xseq_0_reg[48];
uint32_t xseq_1_reg[16];
uint32_t rseq_gp_reg[128];
uint32_t rseq_0_reg[32];
uint32_t rseq_1_reg[16];
uint32_t rseq_2_reg[16];
uint32_t aseq_gp_reg[128];
uint32_t aseq_0_reg[32];
uint32_t aseq_1_reg[16];
uint32_t aseq_2_reg[16];
uint32_t cmd_dma_reg[16];
uint32_t req0_dma_reg[15];
uint32_t resp0_dma_reg[15];
uint32_t req1_dma_reg[15];
uint32_t xmt0_dma_reg[32];
uint32_t xmt1_dma_reg[32];
uint32_t xmt2_dma_reg[32];
uint32_t xmt3_dma_reg[32];
uint32_t xmt4_dma_reg[32];
uint32_t xmt_data_dma_reg[16];
uint32_t rcvt0_data_dma_reg[32];
uint32_t rcvt1_data_dma_reg[32];
uint32_t risc_gp_reg[128];
uint32_t shadow_reg[11];
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[224];
uint32_t fb_hdw_reg[208];
uint32_t code_ram[0x2000];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
uint32_t req_q_size[2];
uint32_t rsp_q_size;
uint32_t req_rsp_ext_mem[1];
} ql_81xx_fw_dump_t;
typedef struct ql_83xx_fw_dump {
uint32_t hccr;
uint32_t r2h_status;
uint32_t aer_ues;
uint32_t hostrisc_reg[48];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[256];
uint32_t xseq_0_reg[48];
uint32_t xseq_1_reg[16];
uint32_t xseq_2_reg[16];
uint32_t rseq_gp_reg[256];
uint32_t rseq_0_reg[32];
uint32_t rseq_1_reg[16];
uint32_t rseq_2_reg[16];
uint32_t rseq_3_reg[16];
uint32_t aseq_gp_reg[256];
uint32_t aseq_0_reg[32];
uint32_t aseq_1_reg[16];
uint32_t aseq_2_reg[16];
uint32_t aseq_3_reg[16];
uint32_t cmd_dma_reg[64];
uint32_t req0_dma_reg[15];
uint32_t resp0_dma_reg[15];
uint32_t req1_dma_reg[15];
uint32_t xmt0_dma_reg[32];
uint32_t xmt1_dma_reg[32];
uint32_t xmt2_dma_reg[32];
uint32_t xmt3_dma_reg[32];
uint32_t xmt4_dma_reg[32];
uint32_t xmt_data_dma_reg[16];
uint32_t rcvt0_data_dma_reg[32];
uint32_t rcvt1_data_dma_reg[32];
uint32_t risc_gp_reg[128];
uint32_t shadow_reg[11];
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[256];
uint32_t rq0_array_reg[256];
uint32_t rq1_array_reg[256];
uint32_t rp0_array_reg[256];
uint32_t rp1_array_reg[256];
uint32_t ato_array_reg[128];
uint32_t queue_control_reg[16];
uint32_t fb_hdw_reg[432];
uint32_t code_ram[0x2400];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
uint32_t req_q_size[2];
uint32_t rsp_q_size;
uint32_t req_rsp_ext_mem[1];
} ql_83xx_fw_dump_t;
#ifdef _KERNEL
#define DT_NOP 0
#define DT_THDR 99
#define DT_TEND 255
#define DT_RIOB1 256
#define DT_WIOB1 257
#define DT_RIOB2 258
#define DT_WIOB2 259
#define DT_RPCI 260
#define DT_WPCI 261
#define DT_RRAM 262
#define DT_GQUE 263
#define DT_GFCE 264
#define DT_PRISC 265
#define DT_RRISC 266
#define DT_DINT 267
#define DT_GHBD 268
#define DT_SCRA 269
#define DT_RRREG 270
#define DT_WRREG 271
#define DT_RRRAM 272
#define DT_RPCIC 273
#define DT_GQUES 274
#define DT_WDMP 275
typedef struct ql_dt_hdr {
uint32_t type;
uint32_t first_entry_offset;
uint32_t size_of_template;
uint32_t rsv;
uint32_t num_of_entries;
uint32_t version;
uint32_t driver_timestamp;
uint32_t checksum;
uint32_t rsv_1;
uint32_t driver_info[3];
uint32_t saved_state_area[16];
uint32_t rsv_2[8];
uint32_t ver_attr[5];
} ql_dt_hdr_t;
typedef struct ql_dt_entry_hdr {
uint32_t type;
uint32_t size;
uint32_t rsv;
#ifdef _BIG_ENDIAN
uint8_t driver_flags;
uint8_t rsv_2;
uint8_t rsv_1;
uint8_t capture_flags;
#else
uint8_t capture_flags;
uint8_t rsv_1;
uint8_t rsv_2;
uint8_t driver_flags;
#endif
} ql_dt_entry_hdr_t;
#define PF_ONLY_FLAG BIT_0
#define PF_VF_FLAG BIT_1
#define SKIPPED_FLAG BIT_7
typedef struct ql_dt_entry {
ql_dt_entry_hdr_t h;
uint32_t data[1];
} ql_dt_entry_t;
typedef struct ql_dmp_template {
uint32_t rsv[2];
uint32_t len;
uint32_t major_ver;
uint32_t minor_ver;
uint32_t subminor_ver;
uint32_t attribute;
ql_dt_hdr_t hdr;
ql_dt_entry_t entries[1];
} ql_dmp_template_t;
typedef struct ql_dt_riob1 {
ql_dt_entry_hdr_t h;
uint32_t addr;
#ifdef _BIG_ENDIAN
uint8_t pci_offset;
uint8_t reg_count_h;
uint8_t reg_count_l;
uint8_t reg_size;
#else
uint8_t reg_size;
uint8_t reg_count_l;
uint8_t reg_count_h;
uint8_t pci_offset;
#endif
} ql_dt_riob1_t;
typedef struct ql_dt_wiob1 {
ql_dt_entry_hdr_t h;
uint32_t addr;
uint32_t data;
#ifdef _BIG_ENDIAN
uint8_t rsv[3];
uint8_t pci_offset;
#else
uint8_t pci_offset;
uint8_t rsv[3];
#endif
} ql_dt_wiob1_t;
typedef struct ql_dt_riob2 {
ql_dt_entry_hdr_t h;
uint32_t addr;
#ifdef _BIG_ENDIAN
uint8_t pci_offset;
uint8_t reg_count_h;
uint8_t reg_count_l;
uint8_t reg_size;
uint8_t rsv[3];
uint8_t bank_sel_offset;
#else
uint8_t reg_size;
uint8_t reg_count_l;
uint8_t reg_count_h;
uint8_t pci_offset;
uint8_t bank_sel_offset;
uint8_t rsv[3];
#endif
uint32_t reg_bank;
} ql_dt_riob2_t;
typedef struct ql_dt_wiob2 {
ql_dt_entry_hdr_t h;
uint32_t addr;
#ifdef _BIG_ENDIAN
uint8_t rsv[2];
uint8_t data_h;
uint8_t data_l;
uint8_t bank_sel_offset;
uint8_t pci_offset;
uint8_t rsv1[2];
#else
uint8_t data_l;
uint8_t data_h;
uint8_t rsv[2];
uint8_t rsv1[2];
uint8_t pci_offset;
uint8_t bank_sel_offset;
#endif
uint32_t reg_bank;
} ql_dt_wiob2_t;
typedef struct ql_dt_rpci {
ql_dt_entry_hdr_t h;
uint32_t addr;
} ql_dt_rpci_t;
typedef struct ql_dt_wpci {
ql_dt_entry_hdr_t h;
uint32_t addr;
uint32_t data;
} ql_dt_wpci_t, ql_dt_wrreg_t;
typedef struct ql_dt_rram {
ql_dt_entry_hdr_t h;
#ifdef _BIG_ENDIAN
uint8_t rsv[3];
uint8_t ram_area;
#else
uint8_t ram_area;
uint8_t rsv[3];
#endif
uint32_t start_addr;
uint32_t end_addr;
} ql_dt_rram_t;
typedef struct ql_dt_gque {
ql_dt_entry_hdr_t h;
uint32_t num_queues;
#ifdef _BIG_ENDIAN
uint8_t rsv[3];
uint8_t queue_type;
#else
uint8_t queue_type;
uint8_t rsv[3];
#endif
} ql_dt_gque_t, ql_dt_gques_t;
typedef struct ql_dt_gfce {
ql_dt_entry_hdr_t h;
uint32_t fce_trace_size;
uint32_t write_pointer[2];
uint32_t base_pointer[2];
uint32_t fce_enable_mb0;
uint32_t fce_enable_mb2;
uint32_t fce_enable_mb3;
uint32_t fce_enable_mb4;
uint32_t fce_enable_mb5;
uint32_t fce_enable_mb6;
} ql_dt_gfce_t;
typedef struct ql_dt_prisc {
ql_dt_entry_hdr_t h;
} ql_dt_prisc_t, ql_dt_rrisc_t;
typedef struct ql_dt_dint {
ql_dt_entry_hdr_t h;
#ifdef _BIG_ENDIAN
uint8_t rsv[3];
uint8_t pci_offset;
#else
uint8_t pci_offset;
uint8_t rsv[3];
#endif
uint32_t data;
} ql_dt_dint_t;
typedef struct ql_dt_ghbd {
ql_dt_entry_hdr_t h;
#ifdef _BIG_ENDIAN
uint8_t rsv[3];
uint8_t host_buf_type;
#else
uint8_t host_buf_type;
uint8_t rsv[3];
#endif
uint32_t buf_size;
uint32_t start_addr;
} ql_dt_ghbd_t;
typedef struct ql_dt_scra {
ql_dt_entry_hdr_t h;
uint32_t scratch_size;
} ql_dt_scra_t;
typedef struct ql_dt_rrreg {
ql_dt_entry_hdr_t h;
uint32_t addr;
uint32_t count;
} ql_dt_rrreg_t, ql_dt_rrram_t, ql_dt_rpcic_t;
typedef struct ql_dt_wdmp {
ql_dt_entry_hdr_t h;
uint32_t length;
uint32_t data[1];
} ql_dt_wdmp_t;
#define LNF_NVRAM_DATA BIT_0
#define LNF_VPD_DATA BIT_1
#define PROD_ID_1 0x4953
#define PROD_ID_2 0x0000
#define PROD_ID_2a 0x5020
#define PROD_ID_3 0x2020
#define NV_START_BIT BIT_2
#define NV_WRITE_OP (BIT_26 + BIT_24)
#define NV_READ_OP (BIT_26 + BIT_25)
#define NV_ERASE_OP (BIT_26 + BIT_25 + BIT_24)
#define NV_MASK_OP (BIT_26 + BIT_25 + BIT_24)
#define NV_DELAY_COUNT 10
struct ql_dev_id {
uint8_t al_pa;
uint8_t area;
uint8_t domain;
uint8_t loop_id;
};
struct ql_ex_dev_id {
uint8_t al_pa;
uint8_t area;
uint8_t domain;
uint8_t reserved;
uint8_t loop_id_l;
uint8_t loop_id_h;
};
struct ql_24_dev_id {
uint8_t al_pa;
uint8_t area;
uint8_t domain;
uint8_t reserved;
uint8_t n_port_hdl_l;
uint8_t n_port_hdl_h;
uint8_t reserved_1[2];
};
typedef union ql_dev_id_list {
struct ql_dev_id d;
struct ql_ex_dev_id d_ex;
struct ql_24_dev_id d_24;
} ql_dev_id_list_t;
#define DEVICE_LIST_ENTRIES MAX_24_FIBRE_DEVICES
int ql_initialize_adapter(ql_adapter_state_t *);
int ql_pci_sbus_config(ql_adapter_state_t *);
int ql_nvram_config(ql_adapter_state_t *);
uint16_t ql_get_nvram_word(ql_adapter_state_t *, uint32_t);
void ql_nv_write(ql_adapter_state_t *, uint16_t);
void ql_nv_delay(void);
int ql_lock_nvram(ql_adapter_state_t *, uint32_t *, uint32_t);
void ql_release_nvram(ql_adapter_state_t *);
void ql_common_properties(ql_adapter_state_t *);
uint32_t ql_get_prop(ql_adapter_state_t *, char *);
int ql_load_isp_firmware(ql_adapter_state_t *);
int ql_start_firmware(ql_adapter_state_t *);
int ql_set_cache_line(ql_adapter_state_t *);
int ql_init_rings(ql_adapter_state_t *);
int ql_fw_ready(ql_adapter_state_t *, uint8_t);
void ql_dev_list(ql_adapter_state_t *, ql_dev_id_list_t *, uint32_t,
port_id_t *, uint16_t *);
void ql_reset_chip(ql_adapter_state_t *);
int ql_abort_isp(ql_adapter_state_t *);
void ql_requeue_all_cmds(ql_adapter_state_t *);
int ql_vport_control(ql_adapter_state_t *, uint8_t);
int ql_vport_modify(ql_adapter_state_t *, uint8_t, uint8_t);
int ql_vport_enable(ql_adapter_state_t *);
ql_adapter_state_t *ql_vport_create(ql_adapter_state_t *, uint8_t);
void ql_vport_destroy(ql_adapter_state_t *);
#endif
#ifdef __cplusplus
}
#endif
#endif