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); |