diff options
| author | Scott Long <scottl@FreeBSD.org> | 2008-02-06 01:02:20 +0000 |
|---|---|---|
| committer | Scott Long <scottl@FreeBSD.org> | 2008-02-06 01:02:20 +0000 |
| commit | 4fdb276a8886bbe3fae792a0f2a53550667994bd (patch) | |
| tree | 6cea8f320fab6eabe806a98825572d9b3bea1bb6 /sys/dev/hptrr/ldm.h | |
| parent | 5dff04c31f18fe0a5e00e8c79b37537bb68a15ea (diff) | |
Notes
Diffstat (limited to 'sys/dev/hptrr/ldm.h')
| -rw-r--r-- | sys/dev/hptrr/ldm.h | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/sys/dev/hptrr/ldm.h b/sys/dev/hptrr/ldm.h index af08cf464d65..6075df4938b6 100644 --- a/sys/dev/hptrr/ldm.h +++ b/sys/dev/hptrr/ldm.h @@ -27,13 +27,13 @@ */ #include <dev/hptrr/hptrr_config.h> /* - * $Id: ldm.h,v 1.59 2007/04/17 07:00:06 mah Exp $ + * $Id: ldm.h,v 1.69 2007/11/22 07:31:55 gmm Exp $ * Copyright (C) 2004-2005 HighPoint Technologies, Inc. All rights reserved. */ #ifndef _HPT_LDM_H_ #define _HPT_LDM_H_ -#define VERMAGIC_LDM 57 +#define VERMAGIC_LDM 69 #if defined(__cplusplus) extern "C" { @@ -62,6 +62,13 @@ extern "C" { #define MIN(a,b) (((a)<(b))?(a):(b)) +typedef char check_HPT_TIME_is_unsigned[ (HPT_TIME)(-1) > 0 ? 1 : -1 ]; + +#define hpt_time_after_eq(a, b) ((long)(a) - (long)(b) >= 0) +#define hpt_time_after(a, b) ((long)(a) - (long)(b) > 0) + + + struct freelist { int dma; HPT_UINT alignment; @@ -106,15 +113,17 @@ struct lock_request { struct lock_request *next; struct list_head waiters; /* blocked commands */ struct tq_item callback; + int lock_cc; }; -#define INIT_LOCK_REQUEST(req, _start, _end, _cb, _arg) \ +#define INIT_LOCK_REQUEST(req, _start, _end, _cb, _arg, _cc) \ do {\ (req)->next = 0;\ (req)->start = _start;\ (req)->end = _end;\ INIT_TQ_ITEM(&(req)->callback, _cb, _arg);\ INIT_LIST_HEAD(&(req)->waiters);\ + (req)->lock_cc = _cc;\ } while (0) struct task_queue { @@ -132,7 +141,7 @@ struct dmapool_order { struct dmapool_client { void * handle; HPT_UINT (*shrink)(void *handle, HPT_UINT npages); - void (*resume)(void *handle); + int (*resume)(void *handle); struct dmapool_client *next; }; @@ -218,6 +227,11 @@ void ldm_ioctl( PVBUS vbus, IOCTL_ARG *IAPnt); HPT_U32 ldm_get_device_id(PVDEV vd); /* for ioctl */ void ldm_set_rebuild_priority(PVBUS vbus, int priority); void ldm_set_autorebuild(PVBUS vbus, int enable); +void ldm_set_spindown_disks_timeout(PVBUS vbus, HPT_U8 timeout); + +#ifndef __HPT_RAW_LBA +#define __HPT_RAW_LBA HPT_RAW_LBA +#endif #include <dev/hptrr/array.h> @@ -225,32 +239,33 @@ typedef struct hpt_raw_disk { #ifdef SUPPORT_ARRAY PRAW_PARTITION raw_part_list; - HPT_RAW_LBA max_available_capacity; - HPT_RAW_LBA total_available_capacity; + __HPT_RAW_LBA max_available_capacity; + __HPT_RAW_LBA total_available_capacity; #endif - HPT_RAW_LBA real_capacity; - HPT_RAW_LBA head_position; + __HPT_RAW_LBA real_capacity; + __HPT_RAW_LBA head_position; HPT_U16 max_sectors_per_cmd; + HPT_U8 max_queue_depth; HPT_U8 user_select_mode; - HPT_U8 uninitialized : 1; - HPT_U8 legacy_disk : 1; - HPT_U8 is_spare : 1; - HPT_U8 v3_format : 1; - HPT_U8 need_sync : 1; - HPT_U8 temp_spare : 1; - HPT_U8 need_check_array : 1; - HPT_U8 df_user_mode_set: 1; + HPT_UINT uninitialized : 1; + HPT_UINT legacy_disk : 1; + HPT_UINT is_spare : 1; + HPT_UINT v3_format : 1; + HPT_UINT need_sync : 1; + HPT_UINT temp_spare : 1; + HPT_UINT need_check_array : 1; + HPT_UINT df_user_mode_set: 1; - HPT_U8 df_read_ahead_set: 1; - HPT_U8 enable_read_ahead : 1; - HPT_U8 df_write_cache_set: 1; - HPT_U8 enable_write_cache : 1; - HPT_U8 df_tcq_set: 1; - HPT_U8 enable_tcq : 1; - HPT_U8 df_ncq_set: 1; - HPT_U8 enable_ncq : 1; + HPT_UINT df_read_ahead_set: 1; + HPT_UINT enable_read_ahead : 1; + HPT_UINT df_write_cache_set: 1; + HPT_UINT enable_write_cache : 1; + HPT_UINT df_tcq_set: 1; + HPT_UINT enable_tcq : 1; + HPT_UINT df_ncq_set: 1; + HPT_UINT enable_ncq : 1; HIM * him; int index; @@ -271,10 +286,11 @@ struct vdev_class { struct vdev_class *next; - HPT_U8 type; + HPT_U8 __type; HPT_U8 stripped; /* RAID0,3,5,6 */ HPT_U8 redundancy; /* RAID1-1, RAID3/5-1, RAID6-2 */ HPT_U8 must_init; /* RAID3,5,6 */ + HPT_U8 docache; HPT_UINT vbus_ext_size; HPT_UINT vbus_ext_offset; /* used by LDM */ @@ -293,6 +309,7 @@ struct vdev_class void (*remove)(PVDEV vd); void (*reset)(PVDEV vd); void (*sync_stamp)(PVDEV vd); + int (*support_type)(int type); }; @@ -302,6 +319,7 @@ struct vdev_class prefix ## _stripped, \ prefix ## _redundancy, \ prefix ## _must_init, \ + 0, \ prefix ## _vbus_ext_size, \ 0, \ prefix ## _dev_ext_size, \ @@ -315,6 +333,7 @@ struct vdev_class prefix ## _remove, \ prefix ## _reset, \ prefix ## _sync_stamp, \ + 0 \ } #define VD_RAW 1 @@ -327,13 +346,18 @@ struct vdev_class #define VD_JBOD 7 #define VD_RAID5 8 #define VD_RAID6 9 +#define VD_RAID3 10 +#define VD_RAID4 11 +#define VD_RAID1E 12 -#define MAX_VD_TYPE_ID 9 +#define MAX_VD_TYPE_ID 12 struct vdev_class *ldm_find_vdev_class(HPT_U8 type); typedef struct _VDEV { PVBUS vbus; + struct vdev_class *Class; + HPT_U8 type; PVDEV parent; void * ext; HPT_U64 capacity; @@ -353,16 +377,14 @@ typedef struct _VDEV { HPT_U8 vf_bootable : 1; HPT_U8 vf_resetting: 1; HPT_U8 vf_quiesced: 1; + HPT_U8 vf_clslock: 1; HPT_U8 cache_policy; /* see CACHE_POLICY_* */ HPT_UINT cq_len; HPT_UINT cmds_sent; - HPT_UINT max_queue_depth; struct list_head link; - struct vdev_class *Class; - struct list_head cq_wait_send; struct list_head cq_sent; @@ -444,6 +466,7 @@ PCOMMAND __ldm_alloc_cmd(struct freelist *list); #define CMD_SET_PRIORITY(cmd, pri) #endif + #define CMD_GROUP_GET(grp, cmd) \ do {\ grp->grplist->count++;\ @@ -460,6 +483,8 @@ PCOMMAND __ldm_alloc_cmd(struct freelist *list); } while (0) + + void ldm_queue_cmd(PCOMMAND cmd); void vdev_queue_cmd(PCOMMAND cmd); void ldm_finish_cmd(PCOMMAND cmd); @@ -500,7 +525,7 @@ void ldm_register_device(PVDEV vd); void ldm_unregister_device(PVDEV vd); PVBUS him_handle_to_vbus(void * him_handle); - +void ldm_ide_fixstring (HPT_U8 *s, const int bytecount); #if defined(__cplusplus) } #endif |
