aboutsummaryrefslogtreecommitdiff
path: root/sysutils/smartmontools-devel/files/patch-os_freebsd.h
diff options
context:
space:
mode:
authorSam Lawrance <lawrance@FreeBSD.org>2005-10-10 12:39:59 +0000
committerSam Lawrance <lawrance@FreeBSD.org>2005-10-10 12:39:59 +0000
commit7983d22598d760373466c2d1addd89222fa03f32 (patch)
treeb23645cec794731f2692b2d1ad33c92c7064dbab /sysutils/smartmontools-devel/files/patch-os_freebsd.h
parenta4117142249dffdfbe9a54fdb7c23e0a98c8d6c4 (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.h265
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.