home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / i2o-dev.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  11.3 KB  |  421 lines

  1. /*
  2.  * I2O user space accessible structures/APIs
  3.  *
  4.  * (c) Copyright 1999, 2000 Red Hat Software
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the License, or (at your option) any later version.
  10.  *
  11.  *************************************************************************
  12.  *
  13.  * This header file defines the I2O APIs that are available to both
  14.  * the kernel and user level applications.  Kernel specific structures
  15.  * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which
  16.  * automatically includes this file.
  17.  *
  18.  */
  19.  
  20. #ifndef _I2O_DEV_H
  21. #define _I2O_DEV_H
  22.  
  23. /* How many controllers are we allowing */
  24. #define MAX_I2O_CONTROLLERS    32
  25.  
  26. #include <linux/ioctl.h>
  27.  
  28. /*
  29.  * I2O Control IOCTLs and structures
  30.  */
  31. #define I2O_MAGIC_NUMBER    'i'
  32. #define I2OGETIOPS        _IOR(I2O_MAGIC_NUMBER,0,u8[MAX_I2O_CONTROLLERS])
  33. #define I2OHRTGET        _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct)
  34. #define I2OLCTGET        _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct)
  35. #define I2OPARMSET        _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget)
  36. #define I2OPARMGET        _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget)
  37. #define I2OSWDL         _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer)
  38. #define I2OSWUL         _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer)
  39. #define I2OSWDEL        _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer)
  40. #define I2OVALIDATE        _IOR(I2O_MAGIC_NUMBER,8,u32)
  41. #define I2OHTML         _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
  42. #define I2OEVTREG        _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id)
  43. #define I2OEVTGET        _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info)
  44. #define I2OPASSTHRU        _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru)
  45. #define I2OPASSTHRU32        _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru32)
  46.  
  47. struct i2o_cmd_passthru32 {
  48.     unsigned int iop;    /* IOP unit number */
  49.     __u32 msg;        /* message */
  50. };
  51.  
  52. struct i2o_cmd_passthru {
  53.     unsigned int iop;    /* IOP unit number */
  54.     void __user *msg;    /* message */
  55. };
  56.  
  57. struct i2o_cmd_hrtlct {
  58.     unsigned int iop;    /* IOP unit number */
  59.     void __user *resbuf;    /* Buffer for result */
  60.     unsigned int __user *reslen;    /* Buffer length in bytes */
  61. };
  62.  
  63. struct i2o_cmd_psetget {
  64.     unsigned int iop;    /* IOP unit number */
  65.     unsigned int tid;    /* Target device TID */
  66.     void __user *opbuf;    /* Operation List buffer */
  67.     unsigned int oplen;    /* Operation List buffer length in bytes */
  68.     void __user *resbuf;    /* Result List buffer */
  69.     unsigned int __user *reslen;    /* Result List buffer length in bytes */
  70. };
  71.  
  72. struct i2o_sw_xfer {
  73.     unsigned int iop;    /* IOP unit number */
  74.     unsigned char flags;    /* Flags field */
  75.     unsigned char sw_type;    /* Software type */
  76.     unsigned int sw_id;    /* Software ID */
  77.     void __user *buf;    /* Pointer to software buffer */
  78.     unsigned int __user *swlen;    /* Length of software data */
  79.     unsigned int __user *maxfrag;    /* Maximum fragment count */
  80.     unsigned int __user *curfrag;    /* Current fragment count */
  81. };
  82.  
  83. struct i2o_html {
  84.     unsigned int iop;    /* IOP unit number */
  85.     unsigned int tid;    /* Target device ID */
  86.     unsigned int page;    /* HTML page */
  87.     void __user *resbuf;    /* Buffer for reply HTML page */
  88.     unsigned int __user *reslen;    /* Length in bytes of reply buffer */
  89.     void __user *qbuf;    /* Pointer to HTTP query string */
  90.     unsigned int qlen;    /* Length in bytes of query string buffer */
  91. };
  92.  
  93. #define I2O_EVT_Q_LEN 32
  94.  
  95. struct i2o_evt_id {
  96.     unsigned int iop;
  97.     unsigned int tid;
  98.     unsigned int evt_mask;
  99. };
  100.  
  101. /* Event data size = frame size - message header + evt indicator */
  102. #define I2O_EVT_DATA_SIZE 88
  103.  
  104. struct i2o_evt_info {
  105.     struct i2o_evt_id id;
  106.     unsigned char evt_data[I2O_EVT_DATA_SIZE];
  107.     unsigned int data_size;
  108. };
  109.  
  110. struct i2o_evt_get {
  111.     struct i2o_evt_info info;
  112.     int pending;
  113.     int lost;
  114. };
  115.  
  116. typedef struct i2o_sg_io_hdr {
  117.     unsigned int flags;    /* see I2O_DPT_SG_IO_FLAGS */
  118. } i2o_sg_io_hdr_t;
  119.  
  120. /**************************************************************************
  121.  * HRT related constants and structures
  122.  **************************************************************************/
  123. #define I2O_BUS_LOCAL    0
  124. #define I2O_BUS_ISA    1
  125. #define I2O_BUS_EISA    2
  126. #define I2O_BUS_MCA    3
  127. #define I2O_BUS_PCI    4
  128. #define I2O_BUS_PCMCIA    5
  129. #define I2O_BUS_NUBUS    6
  130. #define I2O_BUS_CARDBUS 7
  131. #define I2O_BUS_UNKNOWN 0x80
  132.  
  133. typedef struct _i2o_pci_bus {
  134.     __u8 PciFunctionNumber;
  135.     __u8 PciDeviceNumber;
  136.     __u8 PciBusNumber;
  137.     __u8 reserved;
  138.     __u16 PciVendorID;
  139.     __u16 PciDeviceID;
  140. } i2o_pci_bus;
  141.  
  142. typedef struct _i2o_local_bus {
  143.     __u16 LbBaseIOPort;
  144.     __u16 reserved;
  145.     __u32 LbBaseMemoryAddress;
  146. } i2o_local_bus;
  147.  
  148. typedef struct _i2o_isa_bus {
  149.     __u16 IsaBaseIOPort;
  150.     __u8 CSN;
  151.     __u8 reserved;
  152.     __u32 IsaBaseMemoryAddress;
  153. } i2o_isa_bus;
  154.  
  155. typedef struct _i2o_eisa_bus_info {
  156.     __u16 EisaBaseIOPort;
  157.     __u8 reserved;
  158.     __u8 EisaSlotNumber;
  159.     __u32 EisaBaseMemoryAddress;
  160. } i2o_eisa_bus;
  161.  
  162. typedef struct _i2o_mca_bus {
  163.     __u16 McaBaseIOPort;
  164.     __u8 reserved;
  165.     __u8 McaSlotNumber;
  166.     __u32 McaBaseMemoryAddress;
  167. } i2o_mca_bus;
  168.  
  169. typedef struct _i2o_other_bus {
  170.     __u16 BaseIOPort;
  171.     __u16 reserved;
  172.     __u32 BaseMemoryAddress;
  173. } i2o_other_bus;
  174.  
  175. typedef struct _i2o_hrt_entry {
  176.     __u32 adapter_id;
  177.     __u32 parent_tid:12;
  178.     __u32 state:4;
  179.     __u32 bus_num:8;
  180.     __u32 bus_type:8;
  181.     union {
  182.         i2o_pci_bus pci_bus;
  183.         i2o_local_bus local_bus;
  184.         i2o_isa_bus isa_bus;
  185.         i2o_eisa_bus eisa_bus;
  186.         i2o_mca_bus mca_bus;
  187.         i2o_other_bus other_bus;
  188.     } bus;
  189. } i2o_hrt_entry;
  190.  
  191. typedef struct _i2o_hrt {
  192.     __u16 num_entries;
  193.     __u8 entry_len;
  194.     __u8 hrt_version;
  195.     __u32 change_ind;
  196.     i2o_hrt_entry hrt_entry[1];
  197. } i2o_hrt;
  198.  
  199. typedef struct _i2o_lct_entry {
  200.     __u32 entry_size:16;
  201.     __u32 tid:12;
  202.     __u32 reserved:4;
  203.     __u32 change_ind;
  204.     __u32 device_flags;
  205.     __u32 class_id:12;
  206.     __u32 version:4;
  207.     __u32 vendor_id:16;
  208.     __u32 sub_class;
  209.     __u32 user_tid:12;
  210.     __u32 parent_tid:12;
  211.     __u32 bios_info:8;
  212.     __u8 identity_tag[8];
  213.     __u32 event_capabilities;
  214. } i2o_lct_entry;
  215.  
  216. typedef struct _i2o_lct {
  217.     __u32 table_size:16;
  218.     __u32 boot_tid:12;
  219.     __u32 lct_ver:4;
  220.     __u32 iop_flags;
  221.     __u32 change_ind;
  222.     i2o_lct_entry lct_entry[1];
  223. } i2o_lct;
  224.  
  225. typedef struct _i2o_status_block {
  226.     __u16 org_id;
  227.     __u16 reserved;
  228.     __u16 iop_id:12;
  229.     __u16 reserved1:4;
  230.     __u16 host_unit_id;
  231.     __u16 segment_number:12;
  232.     __u16 i2o_version:4;
  233.     __u8 iop_state;
  234.     __u8 msg_type;
  235.     __u16 inbound_frame_size;
  236.     __u8 init_code;
  237.     __u8 reserved2;
  238.     __u32 max_inbound_frames;
  239.     __u32 cur_inbound_frames;
  240.     __u32 max_outbound_frames;
  241.     char product_id[24];
  242.     __u32 expected_lct_size;
  243.     __u32 iop_capabilities;
  244.     __u32 desired_mem_size;
  245.     __u32 current_mem_size;
  246.     __u32 current_mem_base;
  247.     __u32 desired_io_size;
  248.     __u32 current_io_size;
  249.     __u32 current_io_base;
  250.     __u32 reserved3:24;
  251.     __u32 cmd_status:8;
  252. } i2o_status_block;
  253.  
  254. /* Event indicator mask flags */
  255. #define I2O_EVT_IND_STATE_CHANGE        0x80000000
  256. #define I2O_EVT_IND_GENERAL_WARNING        0x40000000
  257. #define I2O_EVT_IND_CONFIGURATION_FLAG        0x20000000
  258. #define I2O_EVT_IND_LOCK_RELEASE        0x10000000
  259. #define I2O_EVT_IND_CAPABILITY_CHANGE        0x08000000
  260. #define I2O_EVT_IND_DEVICE_RESET        0x04000000
  261. #define I2O_EVT_IND_EVT_MASK_MODIFIED        0x02000000
  262. #define I2O_EVT_IND_FIELD_MODIFIED        0x01000000
  263. #define I2O_EVT_IND_VENDOR_EVT            0x00800000
  264. #define I2O_EVT_IND_DEVICE_STATE        0x00400000
  265.  
  266. /* Executive event indicitors */
  267. #define I2O_EVT_IND_EXEC_RESOURCE_LIMITS    0x00000001
  268. #define I2O_EVT_IND_EXEC_CONNECTION_FAIL    0x00000002
  269. #define I2O_EVT_IND_EXEC_ADAPTER_FAULT        0x00000004
  270. #define I2O_EVT_IND_EXEC_POWER_FAIL        0x00000008
  271. #define I2O_EVT_IND_EXEC_RESET_PENDING        0x00000010
  272. #define I2O_EVT_IND_EXEC_RESET_IMMINENT     0x00000020
  273. #define I2O_EVT_IND_EXEC_HW_FAIL        0x00000040
  274. #define I2O_EVT_IND_EXEC_XCT_CHANGE        0x00000080
  275. #define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY        0x00000100
  276. #define I2O_EVT_IND_EXEC_MODIFIED_LCT        0x00000200
  277. #define I2O_EVT_IND_EXEC_DDM_AVAILABILITY    0x00000400
  278.  
  279. /* Random Block Storage Event Indicators */
  280. #define I2O_EVT_IND_BSA_VOLUME_LOAD        0x00000001
  281. #define I2O_EVT_IND_BSA_VOLUME_UNLOAD        0x00000002
  282. #define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ    0x00000004
  283. #define I2O_EVT_IND_BSA_CAPACITY_CHANGE     0x00000008
  284. #define I2O_EVT_IND_BSA_SCSI_SMART        0x00000010
  285.  
  286. /* Event data for generic events */
  287. #define I2O_EVT_STATE_CHANGE_NORMAL        0x00
  288. #define I2O_EVT_STATE_CHANGE_SUSPENDED        0x01
  289. #define I2O_EVT_STATE_CHANGE_RESTART        0x02
  290. #define I2O_EVT_STATE_CHANGE_NA_RECOVER     0x03
  291. #define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER    0x04
  292. #define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST    0x05
  293. #define I2O_EVT_STATE_CHANGE_FAILED        0x10
  294. #define I2O_EVT_STATE_CHANGE_FAULTED        0x11
  295.  
  296. #define I2O_EVT_GEN_WARNING_NORMAL        0x00
  297. #define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD    0x01
  298. #define I2O_EVT_GEN_WARNING_MEDIA_FAULT     0x02
  299.  
  300. #define I2O_EVT_CAPABILITY_OTHER        0x01
  301. #define I2O_EVT_CAPABILITY_CHANGED        0x02
  302.  
  303. #define I2O_EVT_SENSOR_STATE_CHANGED        0x01
  304.  
  305. /*
  306.  *    I2O classes / subclasses
  307.  */
  308.  
  309. /*  Class ID and Code Assignments
  310.  *  (LCT.ClassID.Version field)
  311.  */
  312. #define I2O_CLASS_VERSION_10            0x00
  313. #define I2O_CLASS_VERSION_11            0x01
  314.  
  315. /*  Class code names
  316.  *  (from v1.5 Table 6-1 Class Code Assignments.)
  317.  */
  318.  
  319. #define I2O_CLASS_EXECUTIVE            0x000
  320. #define I2O_CLASS_DDM                0x001
  321. #define I2O_CLASS_RANDOM_BLOCK_STORAGE        0x010
  322. #define I2O_CLASS_SEQUENTIAL_STORAGE        0x011
  323. #define I2O_CLASS_LAN                0x020
  324. #define I2O_CLASS_WAN                0x030
  325. #define I2O_CLASS_FIBRE_CHANNEL_PORT        0x040
  326. #define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL    0x041
  327. #define I2O_CLASS_SCSI_PERIPHERAL        0x051
  328. #define I2O_CLASS_ATE_PORT            0x060
  329. #define I2O_CLASS_ATE_PERIPHERAL        0x061
  330. #define I2O_CLASS_FLOPPY_CONTROLLER        0x070
  331. #define I2O_CLASS_FLOPPY_DEVICE         0x071
  332. #define I2O_CLASS_BUS_ADAPTER            0x080
  333. #define I2O_CLASS_PEER_TRANSPORT_AGENT        0x090
  334. #define I2O_CLASS_PEER_TRANSPORT        0x091
  335. #define    I2O_CLASS_END                0xfff
  336.  
  337. /*
  338.  *  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
  339.  */
  340.  
  341. #define I2O_CLASS_MATCH_ANYCLASS        0xffffffff
  342.  
  343. /*
  344.  *  Subclasses
  345.  */
  346.  
  347. #define I2O_SUBCLASS_i960            0x001
  348. #define I2O_SUBCLASS_HDM            0x020
  349. #define I2O_SUBCLASS_ISM            0x021
  350.  
  351. /* Operation functions */
  352.  
  353. #define I2O_PARAMS_FIELD_GET            0x0001
  354. #define I2O_PARAMS_LIST_GET            0x0002
  355. #define I2O_PARAMS_MORE_GET            0x0003
  356. #define I2O_PARAMS_SIZE_GET            0x0004
  357. #define I2O_PARAMS_TABLE_GET            0x0005
  358. #define I2O_PARAMS_FIELD_SET            0x0006
  359. #define I2O_PARAMS_LIST_SET            0x0007
  360. #define I2O_PARAMS_ROW_ADD            0x0008
  361. #define I2O_PARAMS_ROW_DELETE            0x0009
  362. #define I2O_PARAMS_TABLE_CLEAR            0x000A
  363.  
  364. /*
  365.  * I2O serial number conventions / formats
  366.  * (circa v1.5)
  367.  */
  368.  
  369. #define I2O_SNFORMAT_UNKNOWN            0
  370. #define I2O_SNFORMAT_BINARY            1
  371. #define I2O_SNFORMAT_ASCII            2
  372. #define I2O_SNFORMAT_UNICODE            3
  373. #define I2O_SNFORMAT_LAN48_MAC            4
  374. #define I2O_SNFORMAT_WAN            5
  375.  
  376. /*
  377.  * Plus new in v2.0 (Yellowstone pdf doc)
  378.  */
  379.  
  380. #define I2O_SNFORMAT_LAN64_MAC            6
  381. #define I2O_SNFORMAT_DDM            7
  382. #define I2O_SNFORMAT_IEEE_REG64         8
  383. #define I2O_SNFORMAT_IEEE_REG128        9
  384. #define I2O_SNFORMAT_UNKNOWN2            0xff
  385.  
  386. /*
  387.  *    I2O Get Status State values
  388.  */
  389.  
  390. #define ADAPTER_STATE_INITIALIZING        0x01
  391. #define ADAPTER_STATE_RESET            0x02
  392. #define ADAPTER_STATE_HOLD            0x04
  393. #define ADAPTER_STATE_READY            0x05
  394. #define ADAPTER_STATE_OPERATIONAL        0x08
  395. #define ADAPTER_STATE_FAILED            0x10
  396. #define ADAPTER_STATE_FAULTED            0x11
  397.  
  398. /*
  399.  *    Software module types
  400.  */
  401. #define I2O_SOFTWARE_MODULE_IRTOS        0x11
  402. #define I2O_SOFTWARE_MODULE_IOP_PRIVATE        0x22
  403. #define I2O_SOFTWARE_MODULE_IOP_CONFIG        0x23
  404.  
  405. /*
  406.  *    Vendors
  407.  */
  408. #define I2O_VENDOR_DPT                0x001b
  409.  
  410. /*
  411.  * DPT / Adaptec specific values for i2o_sg_io_hdr flags.
  412.  */
  413. #define I2O_DPT_SG_FLAG_INTERPRET        0x00010000
  414. #define I2O_DPT_SG_FLAG_PHYSICAL        0x00020000
  415.  
  416. #define I2O_DPT_FLASH_FRAG_SIZE            0x10000
  417. #define I2O_DPT_FLASH_READ            0x0101
  418. #define I2O_DPT_FLASH_WRITE            0x0102
  419.  
  420. #endif                /* _I2O_DEV_H */
  421.