diff options
author | Sam Lawrance <lawrance@FreeBSD.org> | 2005-10-10 12:39:59 +0000 |
---|---|---|
committer | Sam Lawrance <lawrance@FreeBSD.org> | 2005-10-10 12:39:59 +0000 |
commit | 7983d22598d760373466c2d1addd89222fa03f32 (patch) | |
tree | b23645cec794731f2692b2d1ad33c92c7064dbab /sysutils/smartmontools-devel/files/patch-os_freebsd.h | |
parent | a4117142249dffdfbe9a54fdb7c23e0a98c8d6c4 (diff) |
Add patches for twa (3ware 9000 series controller) support.
Bump PORTREVISION.
PR: ports/84948
Submitted by: Rudolf Cejka <cejkar@fit.vutbr.cz>
Approved by: martines@rochester.rr.com (maintainer, timeout 5 weeks)
Notes
Notes:
svn path=/head/; revision=144808
Diffstat (limited to 'sysutils/smartmontools-devel/files/patch-os_freebsd.h')
-rw-r--r-- | sysutils/smartmontools-devel/files/patch-os_freebsd.h | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/sysutils/smartmontools-devel/files/patch-os_freebsd.h b/sysutils/smartmontools-devel/files/patch-os_freebsd.h new file mode 100644 index 000000000000..f4d397fffc29 --- /dev/null +++ b/sysutils/smartmontools-devel/files/patch-os_freebsd.h @@ -0,0 +1,265 @@ +--- os_freebsd.h.orig Sun Sep 5 09:16:07 2004 ++++ os_freebsd.h Sat Aug 6 21:08:54 2005 +@@ -261,6 +261,262 @@ + + #endif + ++#ifdef HAVE_SYS_TW_OSL_IOCTL_H ++#include <sys/tw_osl_ioctl.h> ++#else ++/* ++ * Following cut out of tw_osl_types.h ++ * ++ */ ++ ++typedef void TW_VOID; ++typedef char TW_INT8; ++typedef unsigned char TW_UINT8; ++typedef short TW_INT16; ++typedef unsigned short TW_UINT16; ++typedef int TW_INT32; ++typedef unsigned int TW_UINT32; ++typedef long long TW_INT64; ++typedef unsigned long long TW_UINT64; ++ ++/* ++ * Following cut out of tw_cl_share.h ++ * ++ */ ++ ++#pragma pack(1) ++ ++struct tw_cl_event_packet { ++ TW_UINT32 sequence_id; ++ TW_UINT32 time_stamp_sec; ++ TW_UINT16 aen_code; ++ TW_UINT8 severity; ++ TW_UINT8 retrieved; ++ TW_UINT8 repeat_count; ++ TW_UINT8 parameter_len; ++ TW_UINT8 parameter_data[98]; ++ TW_UINT32 event_src; ++ TW_UINT8 severity_str[20]; ++}; ++ ++#pragma pack() ++ ++/* ++ * Following cut out of tw_cl_fwif.h ++ * ++ */ ++ ++#define TWA_FW_CMD_ATA_PASSTHROUGH 0x11 ++ ++#define TWA_SENSE_DATA_LENGTH 18 ++ ++#pragma pack(1) ++/* 7000 structures. */ ++struct tw_cl_command_init_connect { ++ TW_UINT8 res1__opcode; /* 3:5 */ ++ TW_UINT8 size; ++ TW_UINT8 request_id; ++ TW_UINT8 res2; ++ TW_UINT8 status; ++ TW_UINT8 flags; ++ TW_UINT16 message_credits; ++ TW_UINT32 features; ++ TW_UINT16 fw_srl; ++ TW_UINT16 fw_arch_id; ++ TW_UINT16 fw_branch; ++ TW_UINT16 fw_build; ++ TW_UINT32 result; ++}; ++ ++ ++/* Structure for downloading firmware onto the controller. */ ++struct tw_cl_command_download_firmware { ++ TW_UINT8 sgl_off__opcode;/* 3:5 */ ++ TW_UINT8 size; ++ TW_UINT8 request_id; ++ TW_UINT8 unit; ++ TW_UINT8 status; ++ TW_UINT8 flags; ++ TW_UINT16 param; ++ TW_UINT8 sgl[1]; ++}; ++ ++ ++/* Structure for hard resetting the controller. */ ++struct tw_cl_command_reset_firmware { ++ TW_UINT8 res1__opcode; /* 3:5 */ ++ TW_UINT8 size; ++ TW_UINT8 request_id; ++ TW_UINT8 unit; ++ TW_UINT8 status; ++ TW_UINT8 flags; ++ TW_UINT8 res2; ++ TW_UINT8 param; ++}; ++ ++ ++/* Structure for sending get/set param commands. */ ++struct tw_cl_command_param { ++ TW_UINT8 sgl_off__opcode;/* 3:5 */ ++ TW_UINT8 size; ++ TW_UINT8 request_id; ++ TW_UINT8 host_id__unit; /* 4:4 */ ++ TW_UINT8 status; ++ TW_UINT8 flags; ++ TW_UINT16 param_count; ++ TW_UINT8 sgl[1]; ++}; ++ ++ ++/* Generic command packet. */ ++struct tw_cl_command_generic { ++ TW_UINT8 sgl_off__opcode;/* 3:5 */ ++ TW_UINT8 size; ++ TW_UINT8 request_id; ++ TW_UINT8 host_id__unit; /* 4:4 */ ++ TW_UINT8 status; ++ TW_UINT8 flags; ++ TW_UINT16 count; /* block cnt, parameter cnt, message credits */ ++}; ++ ++ ++/* Command packet header. */ ++struct tw_cl_command_header { ++ TW_UINT8 sense_data[TWA_SENSE_DATA_LENGTH]; ++ struct { ++ TW_INT8 reserved[4]; ++ TW_UINT16 error; ++ TW_UINT8 padding; ++ TW_UINT8 res__severity; /* 5:3 */ ++ } status_block; ++ TW_UINT8 err_specific_desc[98]; ++ struct { ++ TW_UINT8 size_header; ++ TW_UINT16 reserved; ++ TW_UINT8 size_sense; ++ } header_desc; ++}; ++ ++ ++/* 7000 Command packet. */ ++union tw_cl_command_7k { ++ struct tw_cl_command_init_connect init_connect; ++ struct tw_cl_command_download_firmware download_fw; ++ struct tw_cl_command_reset_firmware reset_fw; ++ struct tw_cl_command_param param; ++ struct tw_cl_command_generic generic; ++ TW_UINT8 padding[1024 - sizeof(struct tw_cl_command_header)]; ++}; ++ ++ ++/* 9000 Command Packet. */ ++struct tw_cl_command_9k { ++ TW_UINT8 res__opcode; /* 3:5 */ ++ TW_UINT8 unit; ++ TW_UINT16 lun_l4__req_id; /* 4:12 */ ++ TW_UINT8 status; ++ TW_UINT8 sgl_offset; /* offset (in bytes) to sg_list, from the ++ end of sgl_entries */ ++ TW_UINT16 lun_h4__sgl_entries; ++ TW_UINT8 cdb[16]; ++ TW_UINT8 sg_list[872];/* total struct size = ++ 1024-sizeof(cmd_hdr) */ ++}; ++ ++ ++/* Full command packet. */ ++struct tw_cl_command_packet { ++ struct tw_cl_command_header cmd_hdr; ++ union { ++ union tw_cl_command_7k cmd_pkt_7k; ++ struct tw_cl_command_9k cmd_pkt_9k; ++ } command; ++}; ++ ++#pragma pack() ++ ++/* ++ * Following cut out of tw_cl_ioctl.h ++ * ++ */ ++ ++#pragma pack(1) ++ ++/* Structure used to handle GET/RELEASE LOCK ioctls. */ ++struct tw_cl_lock_packet { ++ TW_UINT32 timeout_msec; ++ TW_UINT32 time_remaining_msec; ++ TW_UINT32 force_flag; ++}; ++ ++ ++/* Structure used to handle GET COMPATIBILITY INFO ioctl. */ ++struct tw_cl_compatibility_packet { ++ TW_UINT8 driver_version[32];/* driver version */ ++ TW_UINT16 working_srl; /* driver & firmware negotiated srl */ ++ TW_UINT16 working_branch; /* branch # of the firmware that the ++ driver is compatible with */ ++ TW_UINT16 working_build; /* build # of the firmware that the ++ driver is compatible with */ ++}; ++ ++ ++/* Driver understandable part of the ioctl packet built by the API. */ ++struct tw_cl_driver_packet { ++ TW_UINT32 control_code; ++ TW_UINT32 status; ++ TW_UINT32 unique_id; ++ TW_UINT32 sequence_id; ++ TW_UINT32 os_status; ++ TW_UINT32 buffer_length; ++}; ++ ++#pragma pack() ++ ++/* ++ * Following cut out of tw_osl_ioctl.h ++ * ++ */ ++ ++#pragma pack(1) ++/* ++ * We need the structure below to ensure that the first byte of ++ * data_buf is not overwritten by the kernel, after we return ++ * from the ioctl call. Note that cmd_pkt has been reduced ++ * to an array of 1024 bytes even though it's actually 2048 bytes ++ * in size. This is because, we don't expect requests from user ++ * land requiring 2048 (273 sg elements) byte cmd pkts. ++ */ ++typedef struct tw_osli_ioctl_no_data_buf { ++ struct tw_cl_driver_packet driver_pkt; ++ TW_VOID *pdata; /* points to data_buf */ ++ TW_INT8 padding[488 - sizeof(TW_VOID *)]; ++ struct tw_cl_command_packet cmd_pkt; ++} TW_OSLI_IOCTL_NO_DATA_BUF; ++ ++#pragma pack() ++ ++#define TW_OSL_IOCTL_FIRMWARE_PASS_THROUGH \ ++ _IOWR('T', 202, TW_OSLI_IOCTL_NO_DATA_BUF) ++ ++#pragma pack(1) ++ ++typedef struct tw_osli_ioctl_with_payload { ++ struct tw_cl_driver_packet driver_pkt; ++ TW_INT8 padding[488]; ++ struct tw_cl_command_packet cmd_pkt; ++ union { ++ struct tw_cl_event_packet event_pkt; ++ struct tw_cl_lock_packet lock_pkt; ++ struct tw_cl_compatibility_packet compat_pkt; ++ TW_INT8 data_buf[1]; ++ } payload; ++} TW_OSLI_IOCTL_WITH_PAYLOAD; ++ ++#pragma pack() ++ ++#endif ++ + /* + The following definitions/macros/prototypes are used for three + different interfaces, referred to as "the three cases" below. |