diff --git a/drv_io.h b/drv_io.h new file mode 100644 index 0000000..09bffbb --- /dev/null +++ b/drv_io.h @@ -0,0 +1,123 @@ +#ifndef _DRV_IO_H_ +#define _DRV_IO_H_ 1 + +#include "drv_enum.h" +#include "drv_common.h" +#include "drv_humber.h" + +#define MAX_LOCAL_CHIP_NUM 2 +#define MAX_LOCAL_PORT_NUM 256 + +#define MAX_ENTRY_WORD 64 +#define MAX_ENTRY_BYTE 128 + +#define CONDITIONAL_BREAK(exp) if((exp)) break +#define CONDITIONAL_CONTINUE(exp) if((exp)) continue + +#define DRV_IOC_DIR_BITS 2 +#define DRV_IOC_MEM_BITS 1 +#define DRV_IOC_MEMID_BITS 13 +#define DRV_IOC_FIELDID_BITS 16 +#define DRV_ENTRY_FLAGS 0x1fff + +#define DRV_HASH_INVALID_INDEX 0x1FFFF +#define DRV_IOC_DIR_MASK ((1 << DRV_IOC_DIR_BITS)-1) +#define DRV_IOC_MEM_MASK ((1 << DRV_IOC_MEM_BITS)-1) +#define DRV_IOC_MEMID_MASK ((1 << DRV_IOC_MEMID_BITS)-1) +#define DRV_IOC_FIELDID_MASK ((1 << DRV_IOC_FIELDID_BITS)-1) +#define DRV_IOC_FIELDID_SHIFT 0 +#define DRV_IOC_MEMID_SHIFT ((DRV_IOC_FIELDID_SHIFT + DRV_IOC_FIELDID_BITS) +#define DRV_IOC_MEM_SHIFT ((DRV_IOC_MEMID_SHIFT + DRV_IOC_MEMID_BITS) +#define DRV_IOC_DIR_SHIFT ((DRV_IOC_MEM_SHIFT + DRV_IOC_MEM_BITS) +#define DRV_IOC_OP(cmd) (((cmd) >> DRV_IOC_DIR_SHIFT)&DRV_IOC_DIR_MASK) +#define DRV_IOC_MEMID(cmd) (((cmd) >> DRV_IOC_MEMID_SHIFT)&DRV_IOC_MEMID_MASK) +#define DRV_IOC_FIELDID(cmd) (((cmd) >> DRV_IOC_FIELDID_SHIFT)&DRV_IOC_FIELDID_MASK) + +#define CHIP_IS_EXTERNAL_CHIP(chip_id) ((chip_id) == current_external_chip_id;//0xff + +#define DRV_IOC_READ 1U +#define DRV_IOC_WRITE 2U + +#define DRV_IOC(dir, mem, memid, fieldid)\ + (((dir)<