hptproc.c (9c79794016d679440487dea61b3b986397c9ecbb) hptproc.c (1713e81b9cdf06d2a9a365a7ded13a54fad84798)
1/*
1/*
2 * Copyright (c) 2004-2005 HighPoint Technologies, Inc.
2 * Copyright (c) 2003-2004 HighPoint Technologies, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright

--- 6 unchanged lines hidden (view full) ---

17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright

--- 6 unchanged lines hidden (view full) ---

17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD$
27 */
28/*
29 * hptproc.c sysctl support
30 */
31#include <sys/param.h>
32#include <sys/systm.h>
33#include <sys/kernel.h>
34#include <sys/malloc.h>
35#include <sys/sysctl.h>
36#include <machine/stdarg.h>
37
25 */
26/*
27 * hptproc.c sysctl support
28 */
29#include <sys/param.h>
30#include <sys/systm.h>
31#include <sys/kernel.h>
32#include <sys/malloc.h>
33#include <sys/sysctl.h>
34#include <machine/stdarg.h>
35
38#ifndef __KERNEL__
39#define __KERNEL__
40#endif
41
42#include <dev/hptmv/global.h>
43#include <dev/hptmv/hptintf.h>
44#include <dev/hptmv/osbsd.h>
36#include <dev/hptmv/global.h>
37#include <dev/hptmv/hptintf.h>
38#include <dev/hptmv/osbsd.h>
45#include <dev/hptmv/access601.h>
39#include <contrib/dev/hptmv/access601.h>
46
47int hpt_rescan_all(void);
48
49/***************************************************************************/
50
51static char hptproc_buffer[256];
40
41int hpt_rescan_all(void);
42
43/***************************************************************************/
44
45static char hptproc_buffer[256];
52extern char DRIVER_VERSION[];
53
54#define FORMAL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \
55 struct sysctl_req *req
56#define REAL_HANDLER_ARGS oidp, arg1, arg2, req
57typedef struct sysctl_req HPT_GET_INFO;
58
46
47#define FORMAL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \
48 struct sysctl_req *req
49#define REAL_HANDLER_ARGS oidp, arg1, arg2, req
50typedef struct sysctl_req HPT_GET_INFO;
51
59static int
60hpt_set_asc_info(IAL_ADAPTER_T *pAdapter, char *buffer,int length)
52static int hpt_set_asc_info(IAL_ADAPTER_T *pAdapter, char *buffer,int length)
61{
62 int orig_length = length+4;
63 PVBus _vbus_p = &pAdapter->VBus;
64 PVDevice pArray;
65 PVDevice pSubArray, pVDev;
66 UINT i, iarray, ichan;
67 struct cam_periph *periph = NULL;
68 intrmask_t oldspl;

--- 50 unchanged lines hidden (view full) ---

119 pVDev = &pAdapter->VDevices[ichan];
120 if(!pVDev->u.disk.df_on_line || pVDev->pParent) return -EINVAL;
121
122 /* Not allow to use a mounted disk ??? test*/
123 for(i = 0; i < MAX_VDEVICE_PER_VBUS; i++)
124 if(pVDev == _vbus_p->pVDevice[i])
125 {
126 periph = hpt_get_periph(pAdapter->mvSataAdapter.adapterId,i);
53{
54 int orig_length = length+4;
55 PVBus _vbus_p = &pAdapter->VBus;
56 PVDevice pArray;
57 PVDevice pSubArray, pVDev;
58 UINT i, iarray, ichan;
59 struct cam_periph *periph = NULL;
60 intrmask_t oldspl;

--- 50 unchanged lines hidden (view full) ---

111 pVDev = &pAdapter->VDevices[ichan];
112 if(!pVDev->u.disk.df_on_line || pVDev->pParent) return -EINVAL;
113
114 /* Not allow to use a mounted disk ??? test*/
115 for(i = 0; i < MAX_VDEVICE_PER_VBUS; i++)
116 if(pVDev == _vbus_p->pVDevice[i])
117 {
118 periph = hpt_get_periph(pAdapter->mvSataAdapter.adapterId,i);
127 if (periph != NULL && periph->refcount >= 1)
119 if (periph != NULL && periph->refcount == 1)
128 {
129 hpt_printk(("Can not use disk used by OS!\n"));
130 return -EINVAL;
131 }
132 /* the Mounted Disk isn't delete */
133 }
134
135 switch(pArray->VDeviceType)
136 {
137 case VD_RAID_1:
138 case VD_RAID_5:
139 {
140 pSubArray = pArray;
141loop:
142 oldspl = lock_driver();
143 if(hpt_add_disk_to_array(_VBUS_P VDEV_TO_ID(pSubArray), VDEV_TO_ID(pVDev)) == -1) {
144 unlock_driver(oldspl);
145 return -EINVAL;
146 }
120 {
121 hpt_printk(("Can not use disk used by OS!\n"));
122 return -EINVAL;
123 }
124 /* the Mounted Disk isn't delete */
125 }
126
127 switch(pArray->VDeviceType)
128 {
129 case VD_RAID_1:
130 case VD_RAID_5:
131 {
132 pSubArray = pArray;
133loop:
134 oldspl = lock_driver();
135 if(hpt_add_disk_to_array(_VBUS_P VDEV_TO_ID(pSubArray), VDEV_TO_ID(pVDev)) == -1) {
136 unlock_driver(oldspl);
137 return -EINVAL;
138 }
147 pSubArray->u.array.rf_auto_rebuild = 0;
148 pSubArray->u.array.rf_abort_rebuild = 0;
149 hpt_queue_dpc((HPT_DPC)hpt_rebuild_data_block, pAdapter, pSubArray, DUPLICATE);
139 pArray->u.array.rf_auto_rebuild = 0;
140 pArray->u.array.rf_abort_rebuild = 0;
141 hpt_queue_dpc((HPT_DPC)hpt_rebuild_data_block, pAdapter, pArray, DUPLICATE);
150 unlock_driver(oldspl);
151 break;
152 }
153 case VD_RAID_0:
154 for (i = 0; (UCHAR)i < pArray->u.array.bArnMember; i++)
155 if(pArray->u.array.pMember[i] && mIsArray(pArray->u.array.pMember[i]) &&
156 (pArray->u.array.pMember[i]->u.array.rf_broken == 1))
157 {

--- 68 unchanged lines hidden (view full) ---

226 _vbus_(r5.enable_write_back) = *buffer-'0';
227 if (_vbus_(r5.enable_write_back))
228 hpt_printk(("RAID5 write back enabled"));
229 return orig_length;
230 }
231 }
232 else
233#endif
142 unlock_driver(oldspl);
143 break;
144 }
145 case VD_RAID_0:
146 for (i = 0; (UCHAR)i < pArray->u.array.bArnMember; i++)
147 if(pArray->u.array.pMember[i] && mIsArray(pArray->u.array.pMember[i]) &&
148 (pArray->u.array.pMember[i]->u.array.rf_broken == 1))
149 {

--- 68 unchanged lines hidden (view full) ---

218 _vbus_(r5.enable_write_back) = *buffer-'0';
219 if (_vbus_(r5.enable_write_back))
220 hpt_printk(("RAID5 write back enabled"));
221 return orig_length;
222 }
223 }
224 else
225#endif
234#endif
226#endif /* SUPPORT_ARRAY */
235 if (0) {} /* just to compile */
227 if (0) {} /* just to compile */
236#ifdef DEBUG
228#if DBGUG
237 else if (length>=9 && strncmp(buffer, "dbglevel ", 9)==0) {
238 buffer+=9;
239 length-=9;
240 if (length>=1 && *buffer>='0' && *buffer<='3') {
241 hpt_dbg_level = *buffer-'0';
242 return orig_length;
243 }
244 }
245 else if (length>=8 && strncmp(buffer, "disable ", 8)==0) {
246 /* TO DO */
247 }
229 else if (length>=9 && strncmp(buffer, "dbglevel ", 9)==0) {
230 buffer+=9;
231 length-=9;
232 if (length>=1 && *buffer>='0' && *buffer<='3') {
233 hpt_dbg_level = *buffer-'0';
234 return orig_length;
235 }
236 }
237 else if (length>=8 && strncmp(buffer, "disable ", 8)==0) {
238 /* TO DO */
239 }
248#endif
240#endif
249
250 return -EINVAL;
251}
252
253/*
254 * Since we have only one sysctl node, add adapter ID in the command
255 * line string: e.g. "hpt 0 rebuild start"
256 */
241
242 return -EINVAL;
243}
244
245/*
246 * Since we have only one sysctl node, add adapter ID in the command
247 * line string: e.g. "hpt 0 rebuild start"
248 */
257static int
258hpt_set_info(int length)
249static int hpt_set_info(int length)
259{
260 int retval;
261
262#ifdef SUPPORT_IOCTL
263 PUCHAR ke_area;
264 int err;
265 DWORD dwRet;
250{
251 int retval;
252
253#ifdef SUPPORT_IOCTL
254 PUCHAR ke_area;
255 int err;
256 DWORD dwRet;
266 PHPT_IOCTL_PARAM piop;
257 PHPT_IOCTL_PARAM32 piop;
267#endif
268 char *buffer = hptproc_buffer;
269 if (length >= 6) {
270 if (strncmp(buffer,"hpt ",4) == 0) {
271 IAL_ADAPTER_T *pAdapter;
272 retval = buffer[4]-'0';
273 for (pAdapter=gIal_Adapter; pAdapter; pAdapter=pAdapter->next) {
274 if (pAdapter->mvSataAdapter.adapterId==retval)
275 return (retval = hpt_set_asc_info(pAdapter, buffer+6, length-6)) >= 0? retval : -EINVAL;
276 }
277 return -EINVAL;
278 }
279#ifdef SUPPORT_IOCTL
258#endif
259 char *buffer = hptproc_buffer;
260 if (length >= 6) {
261 if (strncmp(buffer,"hpt ",4) == 0) {
262 IAL_ADAPTER_T *pAdapter;
263 retval = buffer[4]-'0';
264 for (pAdapter=gIal_Adapter; pAdapter; pAdapter=pAdapter->next) {
265 if (pAdapter->mvSataAdapter.adapterId==retval)
266 return (retval = hpt_set_asc_info(pAdapter, buffer+6, length-6)) >= 0? retval : -EINVAL;
267 }
268 return -EINVAL;
269 }
270#ifdef SUPPORT_IOCTL
280 piop = (PHPT_IOCTL_PARAM)buffer;
281 if (piop->Magic == HPT_IOCTL_MAGIC ||
282 piop->Magic == HPT_IOCTL_MAGIC32) {
283 KdPrintE(("ioctl=%d in=%p len=%d out=%p len=%d\n",
271 piop = (PHPT_IOCTL_PARAM32)buffer;
272 if (piop->Magic == HPT_IOCTL_MAGIC) {
273 KdPrintE(("ioctl=%d in=%x len=%d out=%x len=%ld\n",
284 piop->dwIoControlCode,
285 piop->lpInBuffer,
286 piop->nInBufferSize,
287 piop->lpOutBuffer,
288 piop->nOutBufferSize));
289
290 /*
291 * map buffer to kernel.

--- 40 unchanged lines hidden (view full) ---

332#endif
333 }
334
335 return -EINVAL;
336}
337
338#define shortswap(w) ((WORD)((w)>>8 | ((w) & 0xFF)<<8))
339
274 piop->dwIoControlCode,
275 piop->lpInBuffer,
276 piop->nInBufferSize,
277 piop->lpOutBuffer,
278 piop->nOutBufferSize));
279
280 /*
281 * map buffer to kernel.

--- 40 unchanged lines hidden (view full) ---

322#endif
323 }
324
325 return -EINVAL;
326}
327
328#define shortswap(w) ((WORD)((w)>>8 | ((w) & 0xFF)<<8))
329
340static void
341get_disk_name(char *name, PDevice pDev)
330static void get_disk_name(char *name, PDevice pDev)
342{
343 int i;
344 MV_SATA_CHANNEL *pMvSataChannel = pDev->mv;
345 IDENTIFY_DATA2 *pIdentifyData = (IDENTIFY_DATA2 *)pMvSataChannel->identifyDevice;
346
347 for (i = 0; i < 10; i++)
348 ((WORD*)name)[i] = shortswap(pIdentifyData->ModelNumber[i]);
349 name[20] = '\0';
350}
351
331{
332 int i;
333 MV_SATA_CHANNEL *pMvSataChannel = pDev->mv;
334 IDENTIFY_DATA2 *pIdentifyData = (IDENTIFY_DATA2 *)pMvSataChannel->identifyDevice;
335
336 for (i = 0; i < 10; i++)
337 ((WORD*)name)[i] = shortswap(pIdentifyData->ModelNumber[i]);
338 name[20] = '\0';
339}
340
352static int
353hpt_copy_info(HPT_GET_INFO *pinfo, char *fmt, ...)
341static int hpt_copy_info(HPT_GET_INFO *pinfo, char *fmt, ...)
354{
355 int printfretval;
356 va_list ap;
357
358 if(fmt == NULL) {
359 *hptproc_buffer = 0;
360 return (SYSCTL_OUT(pinfo, hptproc_buffer, 1));
361 }
362 else
363 {
364 va_start(ap, fmt);
365 printfretval = vsnprintf(hptproc_buffer, sizeof(hptproc_buffer), fmt, ap);
366 va_end(ap);
367 return(SYSCTL_OUT(pinfo, hptproc_buffer, strlen(hptproc_buffer)));
368 }
369}
370
342{
343 int printfretval;
344 va_list ap;
345
346 if(fmt == NULL) {
347 *hptproc_buffer = 0;
348 return (SYSCTL_OUT(pinfo, hptproc_buffer, 1));
349 }
350 else
351 {
352 va_start(ap, fmt);
353 printfretval = vsnprintf(hptproc_buffer, sizeof(hptproc_buffer), fmt, ap);
354 va_end(ap);
355 return(SYSCTL_OUT(pinfo, hptproc_buffer, strlen(hptproc_buffer)));
356 }
357}
358
371static void
372hpt_copy_disk_info(HPT_GET_INFO *pinfo, PVDevice pVDev, UINT iChan)
359static void hpt_copy_disk_info(HPT_GET_INFO *pinfo, PVDevice pVDev, UINT iChan)
373{
360{
374 char name[32], arrayname[16], *status;
375
376 get_disk_name(name, &pVDev->u.disk);
361 char name[32], arrayname[16];
377
362
378 if (!pVDev->u.disk.df_on_line)
379 status = "Disabled";
380 else if (pVDev->VDeviceType==VD_SPARE)
381 status = "Spare ";
382 else
383 status = "Normal ";
363 get_disk_name(name, &pVDev->u.disk);
384
364
385#ifdef SUPPORT_ARRAY
386 if(pVDev->pParent) {
365#ifdef SUPPORT_ARRAY
366 if(pVDev->pParent)
387 memcpy(arrayname, pVDev->pParent->u.array.ArrayName, MAX_ARRAY_NAME);
367 memcpy(arrayname, pVDev->pParent->u.array.ArrayName, MAX_ARRAY_NAME);
388 if (pVDev->pParent->u.array.CriticalMembers & (1<<pVDev->bSerialNumber))
389 status = "Degraded";
390 }
391 else
392#endif
368 else
369#endif
393 arrayname[0]=0;
370 arrayname[0]=0;
394
395 hpt_copy_info(pinfo, "Channel %d %s %5dMB %s %s\n",
396 iChan+1,
371
372 hpt_copy_info(pinfo, "Channel %d %s %5dMB %s %s\n",
373 iChan+1,
397 name, pVDev->VDeviceCapacity>>11, status, arrayname);
374 name, pVDev->VDeviceCapacity>>11,
375 ((!pVDev->u.disk.df_on_line)? "Disabled" :
376 ((pVDev->VDeviceType != VD_SPARE)?"Normal ":"Spare ")), arrayname);
398}
399
400#ifdef SUPPORT_ARRAY
377}
378
379#ifdef SUPPORT_ARRAY
401static void
402hpt_copy_array_info(HPT_GET_INFO *pinfo, int nld, PVDevice pArray)
380static void hpt_copy_array_info(HPT_GET_INFO *pinfo, int nld, PVDevice pArray)
403{
404 int i;
405 char *sType=0, *sStatus=0;
406 char buf[32];
407 PVDevice pTmpArray;
408
409 switch (pArray->VDeviceType) {
410 case VD_RAID_0:

--- 35 unchanged lines hidden (view full) ---

446 {
447 if(mIsArray(pArray->u.array.pMember[i]))
448 pTmpArray = pArray->u.array.pMember[i];
449 else
450 pTmpArray = pArray;
451
452 if (pTmpArray->u.array.rf_rebuilding) {
453#ifdef DEBUG
381{
382 int i;
383 char *sType=0, *sStatus=0;
384 char buf[32];
385 PVDevice pTmpArray;
386
387 switch (pArray->VDeviceType) {
388 case VD_RAID_0:

--- 35 unchanged lines hidden (view full) ---

424 {
425 if(mIsArray(pArray->u.array.pMember[i]))
426 pTmpArray = pArray->u.array.pMember[i];
427 else
428 pTmpArray = pArray;
429
430 if (pTmpArray->u.array.rf_rebuilding) {
431#ifdef DEBUG
454 sprintf(buf, "Rebuilding %lldMB", (pTmpArray->u.array.RebuildSectors>>11));
455#else
456 sprintf(buf, "Rebuilding %d%%", (UINT)((pTmpArray->u.array.RebuildSectors>>11)*100/((pTmpArray->VDeviceCapacity/(pTmpArray->u.array.bArnMember-1))>>11)));
432 sprintf(buf, "Rebuilding %dMB", (pTmpArray->u.array.RebuildSectors>>11));
433#else
434 sprintf(buf, "Rebuilding %d%%", (pTmpArray->u.array.RebuildSectors>>11)*100/((pTmpArray->VDeviceCapacity/(pTmpArray->u.array.bArnMember-1))>>11));
457#endif
458 sStatus = buf;
459 }
460 else if (pTmpArray->u.array.rf_verifying) {
435#endif
436 sStatus = buf;
437 }
438 else if (pTmpArray->u.array.rf_verifying) {
461 sprintf(buf, "Verifying %d%%", (UINT)((pTmpArray->u.array.RebuildSectors>>11)*100/((pTmpArray->VDeviceCapacity/(pTmpArray->u.array.bArnMember-1))>>11)));
439 sprintf(buf, "Verifying %d%%", (pTmpArray->u.array.RebuildSectors>>11)*100/((pTmpArray->VDeviceCapacity/(pTmpArray->u.array.bArnMember-1))>>11));
462 sStatus = buf;
463 }
464 else if (pTmpArray->u.array.rf_need_rebuild)
465 sStatus = "Critical";
466 else if (pTmpArray->u.array.rf_broken)
467 sStatus = "Critical";
468
469 if(pTmpArray == pArray) goto out;
470 }
471 else
472 goto out;
473 }
474out:
475 if (!sStatus) sStatus = "Normal";
440 sStatus = buf;
441 }
442 else if (pTmpArray->u.array.rf_need_rebuild)
443 sStatus = "Critical";
444 else if (pTmpArray->u.array.rf_broken)
445 sStatus = "Critical";
446
447 if(pTmpArray == pArray) goto out;
448 }
449 else
450 goto out;
451 }
452out:
453 if (!sStatus) sStatus = "Normal";
476 hpt_copy_info(pinfo, "%2d %11s %-20s %5lldMB %-16s", nld, sType, pArray->u.array.ArrayName, pArray->VDeviceCapacity>>11, sStatus);
454 hpt_copy_info(pinfo, "%2d %11s %-20s %5dMB %-16s", nld, sType, pArray->u.array.ArrayName, pArray->VDeviceCapacity>>11, sStatus);
477}
478#endif
479
455}
456#endif
457
480static int
481hpt_get_info(IAL_ADAPTER_T *pAdapter, HPT_GET_INFO *pinfo)
458static int hpt_get_info(IAL_ADAPTER_T *pAdapter, HPT_GET_INFO *pinfo)
482{
483 PVBus _vbus_p = &pAdapter->VBus;
484 struct cam_periph *periph = NULL;
485 UINT channel,j,i;
486 PVDevice pVDev;
487
488#ifndef FOR_DEMO
489 if (pAdapter->beeping) {

--- 55 unchanged lines hidden (view full) ---

545 hpt_copy_info(pinfo," %s\n","not registered");
546 else
547 hpt_copy_info(pinfo," %s%d\n", periph->periph_name, periph->unit_number);
548 }
549 }
550 return 0;
551}
552
459{
460 PVBus _vbus_p = &pAdapter->VBus;
461 struct cam_periph *periph = NULL;
462 UINT channel,j,i;
463 PVDevice pVDev;
464
465#ifndef FOR_DEMO
466 if (pAdapter->beeping) {

--- 55 unchanged lines hidden (view full) ---

522 hpt_copy_info(pinfo," %s\n","not registered");
523 else
524 hpt_copy_info(pinfo," %s%d\n", periph->periph_name, periph->unit_number);
525 }
526 }
527 return 0;
528}
529
553static __inline int
554hpt_proc_in(FORMAL_HANDLER_ARGS, int *len)
530static inline int hpt_proc_in(FORMAL_HANDLER_ARGS, int *len)
555{
556 int i, error=0;
557
558 *len = 0;
559 if ((req->newlen - req->newidx) >= sizeof(hptproc_buffer)) {
560 error = EINVAL;
561 } else {
562 i = (req->newlen - req->newidx);
563 error = SYSCTL_IN(req, hptproc_buffer, i);
564 if (!error)
565 *len = i;
566 (hptproc_buffer)[i] = '\0';
567 }
568 return (error);
569}
570
531{
532 int i, error=0;
533
534 *len = 0;
535 if ((req->newlen - req->newidx) >= sizeof(hptproc_buffer)) {
536 error = EINVAL;
537 } else {
538 i = (req->newlen - req->newidx);
539 error = SYSCTL_IN(req, hptproc_buffer, i);
540 if (!error)
541 *len = i;
542 (hptproc_buffer)[i] = '\0';
543 }
544 return (error);
545}
546
571static int
572hpt_status(FORMAL_HANDLER_ARGS)
547static int hpt_status(FORMAL_HANDLER_ARGS)
573{
574 int length, error=0, retval=0;
575 IAL_ADAPTER_T *pAdapter;
576
577 error = hpt_proc_in(REAL_HANDLER_ARGS, &length);
578
579 if (req->newptr != NULL)
580 {

--- 29 unchanged lines hidden (view full) ---

610
611#define xhptregister_node(name) hptregister_node(name)
612
613#if (__FreeBSD_version < 500043)
614#define hptregister_node(name) \
615 SYSCTL_NODE(, OID_AUTO, name, CTLFLAG_RW, 0, "Get/Set " #name " state root node") \
616 SYSCTL_OID(_ ## name, OID_AUTO, status, CTLTYPE_STRING|CTLFLAG_RW, \
617 NULL, 0, hpt_status, "A", "Get/Set " #name " state")
548{
549 int length, error=0, retval=0;
550 IAL_ADAPTER_T *pAdapter;
551
552 error = hpt_proc_in(REAL_HANDLER_ARGS, &length);
553
554 if (req->newptr != NULL)
555 {

--- 29 unchanged lines hidden (view full) ---

585
586#define xhptregister_node(name) hptregister_node(name)
587
588#if (__FreeBSD_version < 500043)
589#define hptregister_node(name) \
590 SYSCTL_NODE(, OID_AUTO, name, CTLFLAG_RW, 0, "Get/Set " #name " state root node") \
591 SYSCTL_OID(_ ## name, OID_AUTO, status, CTLTYPE_STRING|CTLFLAG_RW, \
592 NULL, 0, hpt_status, "A", "Get/Set " #name " state")
618#else
593#else
619#define hptregister_node(name) \
620 SYSCTL_NODE(, OID_AUTO, name, CTLFLAG_RW, 0, "Get/Set " #name " state root node"); \
621 SYSCTL_OID(_ ## name, OID_AUTO, status, CTLTYPE_STRING|CTLFLAG_RW, \
622 NULL, 0, hpt_status, "A", "Get/Set " #name " state");
623#endif
624
625xhptregister_node(PROC_DIR_NAME);
594#define hptregister_node(name) \
595 SYSCTL_NODE(, OID_AUTO, name, CTLFLAG_RW, 0, "Get/Set " #name " state root node"); \
596 SYSCTL_OID(_ ## name, OID_AUTO, status, CTLTYPE_STRING|CTLFLAG_RW, \
597 NULL, 0, hpt_status, "A", "Get/Set " #name " state");
598#endif
599
600xhptregister_node(PROC_DIR_NAME);