The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/hptmv/vdevice.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2004-2005 HighPoint Technologies, Inc.
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  * $FreeBSD$
   29  */
   30 
   31 #ifndef _VDEVICE_H_
   32 #define _VDEVICE_H_
   33 
   34 /***************************************************************************
   35  * Description:  virtual device header
   36  ***************************************************************************/
   37 
   38 typedef  struct _VDevice
   39 {
   40         UCHAR        VDeviceType;
   41         UCHAR        vf_bootmark: 1;    /* is boot device? */
   42         UCHAR            vf_bootable: 1;    /* has active partition */
   43         UCHAR        vf_online: 1;              /* is usable? */
   44         UCHAR        vf_cache_disk: 1;  /* Cache enabled */
   45         UCHAR        vf_format_v2: 1;   /* old array block */
   46         UCHAR        vf_freed: 1;       /* memory free */
   47         UCHAR        reserve1;
   48         UCHAR        bSerialNumber;     /* valid if pParent!=0 */
   49 
   50         PVDevice         pParent;                       /* parent array */
   51         PVBus        pVBus;                             /* vbus this device located. Must not be NULL. */
   52 
   53         LBA_T        VDeviceCapacity;   /* number of blocks */
   54 
   55         LBA_T        LockedLba;
   56         USHORT       LockedSectors;
   57         USHORT       ActiveRequests;
   58         PCommand     LockWaitList;
   59         void (* HPTLIBAPI QuiesceAction)(_VBUS_ARG void *arg);
   60         void  *QuiesceArg;
   61         void (* HPTLIBAPI flush_callback)(_VBUS_ARG void *arg);
   62         void *flush_callback_arg;
   63 
   64 
   65 #if defined(_RAID5N_)
   66         struct stripe **CacheEntry;
   67         struct range_lock *range_lock;
   68 #endif
   69 
   70         void (* HPTLIBAPI pfnSendCommand)(_VBUS_ARG PCommand pCmd);   /* call this to send a command to a VDevice */
   71         void (* HPTLIBAPI pfnDeviceFailed)(_VBUS_ARG PVDevice pVDev); /* call this when a VDevice failed */
   72 
   73         union {
   74 #ifdef SUPPORT_ARRAY
   75                 RaidArray array;
   76 #endif
   77                 Device disk;
   78         } u;
   79 
   80 } VDevice;
   81 
   82 #define ARRAY_VDEV_SIZE (offsetof(VDevice, u) + sizeof(RaidArray))
   83 #define DISK_VDEV_SIZE  (offsetof(VDevice, u) + sizeof(Device))
   84 
   85 #define Map2pVDevice(pDev) ((PVDevice)((UINT_PTR)pDev - (UINT)(UINT_PTR)&((PVDevice)0)->u.disk))
   86 
   87 /*
   88  * bUserDeviceMode
   89  */
   90 #define MEMBER_NOT_SET_MODE  0x5F
   91 
   92 /*
   93  * arrayType
   94  */
   95 #define VD_SPARE             0
   96 #define VD_REMOVABLE         1
   97 #define VD_ATAPI             2
   98 #define VD_SINGLE_DISK       3
   99 
  100 #define VD_JBOD              4 /* JBOD */
  101 #define VD_RAID_0            5 /* RAID 0 stripe */
  102 #define VD_RAID_1            6 /* RAID 1 mirror */
  103 #define VD_RAID_3            7 /* RAID 3 */
  104 #define VD_RAID_5            8 /* RAID 5 */
  105 #define VD_MAX_TYPE 8
  106 
  107 #ifdef SUPPORT_ARRAY
  108 #define mIsArray(pVDev) (pVDev->VDeviceType>VD_SINGLE_DISK)
  109 #else 
  110 #define mIsArray(pVDev) 0
  111 #endif
  112 
  113 extern void (* HPTLIBAPI pfnSendCommand[])(_VBUS_ARG PCommand pCmd);
  114 extern void (* HPTLIBAPI pfnDeviceFailed[])(_VBUS_ARG PVDevice pVDev);
  115 void HPTLIBAPI fOsDiskFailed(_VBUS_ARG PVDevice pVDev);
  116 void HPTLIBAPI fDeviceSendCommand(_VBUS_ARG PCommand pCmd);
  117 void HPTLIBAPI fSingleDiskFailed(_VBUS_ARG PVDevice pVDev);
  118 
  119 /***************************************************************************
  120  * Description:  RAID Adapter
  121  ***************************************************************************/
  122 
  123 typedef struct _VBus  {
  124         /* pVDevice[] may be non-continuous */
  125         PVDevice      pVDevice[MAX_VDEVICE_PER_VBUS];
  126 
  127         UINT          nInstances;
  128         PChipInstance pChipInstance[MAX_CHIP_IN_VBUS];
  129 
  130         void *        OsExt; /* for OS private use */
  131 
  132         
  133         int serial_mode;
  134         int next_active;
  135         int working_devs;
  136 
  137 
  138 
  139         PCommand pFreeCommands;
  140         DPC_ROUTINE PendingRoutines[MAX_PENDING_ROUTINES];
  141         int PendingRoutinesFirst, PendingRoutinesLast;
  142         DPC_ROUTINE IdleRoutines[MAX_IDLE_ROUTINES];
  143         int IdleRoutinesFirst, IdleRoutinesLast;
  144 
  145 #ifdef SUPPORT_ARRAY
  146         PVDevice pFreeArrayLink;
  147         BYTE    _ArrayTables[MAX_ARRAY_PER_VBUS * ARRAY_VDEV_SIZE];
  148 #endif
  149 
  150 
  151 #ifdef _RAID5N_
  152         struct r5_global_data r5;
  153 #endif
  154 
  155 } VBus;
  156 
  157 /*
  158  * Array members must be on same VBus.
  159  * The platform dependent part shall select one of the following strategy.
  160  */
  161 #ifdef SET_VBUS_FOR_EACH_IRQ
  162 #define CHIP_ON_SAME_VBUS(pChip1, pChip2) ((pChip1)->bChipIntrNum==(pChip2)->bChipIntrNum)
  163 #elif defined(SET_VBUS_FOR_EACH_CONTROLLER)
  164 #define CHIP_ON_SAME_VBUS(pChip1, pChip2) \
  165         ((pChip1)->pci_bus==(pChip2)->pci_bus && (pChip1)->pci_dev==(pChip2)->pci_dev)
  166 #elif defined(SET_VBUS_FOR_EACH_FUNCTION)
  167 #define CHIP_ON_SAME_VBUS(pChip1, pChip2) \
  168         ((pChip1)->pci_bus==(pChip2)->pci_bus && (pChip1)->pci_dev==(pChip2)->pci_dev && (pChip1)->pci_func==(pChip2)->pci_func)
  169 #else 
  170 #error You must set one vbus setting
  171 #endif
  172 
  173 #define FOR_EACH_CHANNEL_ON_VBUS(_pVBus, _pChan) \
  174                 for (_pChan=pChanStart; _pChan<pChanEnd; _pChan++) \
  175                         if (_pChan->pChipInstance->pVBus!=_pVBus) ; else
  176 
  177 #define FOR_EACH_DEV_ON_VBUS(pVBus, pVDev, i) \
  178                 for(i = 0; i < MAX_VDEVICE_PER_VBUS; i++) \
  179                         if ((pVDev=pVBus->pVDevice[i])==0) continue; else
  180 
  181 
  182 #define FOR_EACH_VBUS(pVBus) \
  183         for(pVBus = gVBus; pVBus < &gVBus[MAX_VBUS]; pVBus++) \
  184 
  185 #define FOR_EACH_ARRAY_ON_ALL_VBUS(pVBus, pArray, i) \
  186         for(pVBus = gVBus; pVBus < &gVBus[MAX_VBUS]; pVBus++) \
  187                 for(i = 0; i < MAX_ARRAY_PER_VBUS; i++) \
  188                         if ((pArray=((PVDevice)&pVBus->_ArrayTables[i*ARRAY_VDEV_SIZE]))->u.array.dArStamp==0) continue; else
  189 
  190 #define FOR_EACH_DEV_ON_ALL_VBUS(pVBus, pVDev, i) \
  191         FOR_EACH_VBUS(pVBus) \
  192                 for(i = 0; i < MAX_VDEVICE_PER_VBUS; i++) \
  193                         if ((pVDev=pVBus->pVDevice[i])==0) continue; else
  194 
  195 /***************************************************************************
  196  * Description:  the functions called by IDE layer
  197  ***************************************************************************/
  198 #ifdef SUPPORT_ARRAY
  199 #define IdeRegisterDevice               fCheckArray
  200 #else 
  201 void HPTLIBAPI IdeRegisterDevice(PDevice pDev);
  202 #endif
  203 
  204 /***************************************************************************
  205  * Description:  the functions OS must provided
  206  ***************************************************************************/
  207 
  208 void HPTLIBAPI OsSetDeviceTable(PDevice pDevice, PIDENTIFY_DATA pIdentify);
  209 
  210 /*
  211  * allocate and free data structure
  212  */
  213 PChannel fGetChannelTable(void);
  214 PDevice  fGetDeviceTable(void);
  215 #define  OsGetChannelTable(x, y)  fGetChannelTable()
  216 #define  OsGetDeviceTable(x, y)   fGetDeviceTable()
  217 void    OsReturnTable(PDevice pDevice);
  218 /***************************************************************************
  219  * Description:  the functions Prototype
  220  ***************************************************************************/
  221 /*
  222  * vdevice.c
  223  */
  224 int Initialize(void);
  225 int InitializeAllChips(void);
  226 void InitializeVBus(PVBus pVBus);
  227 void fRegisterChip(PChipInstance pChip);
  228 void __fRegisterVDevices(PVBus pVBus);
  229 void fRegisterVDevices(void);
  230 void HPTLIBAPI UnregisterVDevice(PVDevice);
  231 void HPTLIBAPI fCheckBootable(PVDevice pVDev);
  232 void HPTLIBAPI fFlushVDev(PVDevice pVDev);
  233 void HPTLIBAPI fFlushVDevAsync(PVDevice pVDev, DPC_PROC done, void *arg);
  234 void HPTLIBAPI fShutdownVDev(PVDevice pVDev);
  235 void HPTLIBAPI fResetVBus(_VBUS_ARG0);
  236 void HPTLIBAPI fCompleteAllCommandsSynchronously(PVBus _vbus_p);
  237 
  238 #define RegisterVDevice(pVDev)
  239 #define OsRegisterDevice(pVDev)
  240 #define OsUnregisterDevice(pVDev)
  241 
  242 #ifdef SUPPORT_VBUS_CONFIG
  243 void VBus_Config(PVBus pVBus, char *str);
  244 #else 
  245 #define VBus_Config(pVBus, str)
  246 #endif
  247 
  248 #pragma pack(1)
  249 struct fdisk_partition_table
  250 {
  251         UCHAR           bootid;                         /* bootable?  0=no, 128=yes  */
  252         UCHAR           beghead;                        /* beginning head number */
  253         UCHAR           begsect;                        /* beginning sector number */
  254         UCHAR           begcyl;                         /* 10 bit nmbr, with high 2 bits put in begsect */
  255         UCHAR           systid;                         /* Operating System type indicator code */
  256         UCHAR           endhead;                        /* ending head number */
  257         UCHAR           endsect;                        /* ending sector number */
  258         UCHAR           endcyl;                         /* also a 10 bit nmbr, with same high 2 bit trick */
  259         ULONG           relsect;            /* first sector relative to start of disk */
  260         ULONG           numsect;            /* number of sectors in partition */
  261 };
  262 
  263 typedef struct _Master_Boot_Record
  264 {
  265         UCHAR   bootinst[446];                  /* space to hold actual boot code */
  266         struct  fdisk_partition_table parts[4];
  267         USHORT  signature;                      /* set to 0xAA55 to indicate PC MBR format */
  268 }
  269 Master_Boot_Record, *PMaster_Boot_Record;
  270 
  271 #ifndef SUPPORT_ARRAY
  272 /* TODO: move it later */
  273 #ifdef __BIG_ENDIAN_BITFIELD
  274 typedef DWORD TIME_RECORD;
  275 #else 
  276 typedef struct _TIME_RECORD {
  277    UINT        seconds:6;      /* 0 - 59 */
  278    UINT        minutes:6;      /* 0 - 59 */
  279    UINT        month:4;        /* 1 - 12 */
  280    UINT        hours:6;        /* 0 - 59 */
  281    UINT        day:5;          /* 1 - 31 */
  282    UINT        year:5;         /* 0=2000, 31=2031 */
  283 } TIME_RECORD;
  284 #endif
  285 #endif
  286 
  287 #pragma pack()
  288 #endif

Cache object: dfde78fdf5426c7f4d55ba8fbcdbd0c4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.