Example #1
0
int __init tas_dev_init(void)
{

	int result;

	spin_lock(&lock);
	if (tas_dev_presence != not_initialized) {
		spin_unlock(&lock);
		return 0;
	}
	tas_dev_presence = now_initalizing;
	spin_unlock(&lock);

	result = register_chrdev(tas_major, TAS_DEVICE_NAME , &tas_fops);
	if (result < 0) {
		printk(KERN_WARNING 
		       TAS_DEVICE_NAME ": can't get major %d\n",tas_major);
		return result;
	}
	if (tas_major == 0) tas_major = result; /* dynamic */

	/* register /proc entry */
	if (!create_proc_info_entry(TAS_DEVICE_NAME, 0, NULL, &get_tas_info)) {
		printk(KERN_WARNING 
		       TAS_DEVICE_NAME ": can't get proc entry\n");
		unregister_chrdev(tas_major, TAS_DEVICE_NAME);
		return result;
	}

	(void) try_init_code_buffer();
	tas_dev_presence = available;

	return 0;
}
Example #2
0
/*
 * Just start the APM thread. We do NOT want to do APM BIOS
 * calls from anything but the APM thread, if for no other reason
 * than the fact that we don't trust the APM BIOS. This way,
 * most common APM BIOS problems that lead to protection errors
 * etc will have at least some level of being contained...
 *
 * In short, if something bad happens, at least we have a choice
 * of just killing the apm thread..
 */
static int __init apm_init(void)
{
	if (apm_bios_info.version == 0) {
		printk(KERN_INFO "apm: BIOS not found.\n");
		APM_INIT_ERROR_RETURN;
	}
	printk(KERN_INFO
		"apm: BIOS version %d.%d Flags 0x%02x (Driver version %s)\n",
		((apm_bios_info.version >> 8) & 0xff),
		(apm_bios_info.version & 0xff),
		apm_bios_info.flags,
		driver_version);

	if (apm_disabled) {
		printk(KERN_NOTICE "apm: disabled on user request.\n");
		APM_INIT_ERROR_RETURN;
	}

	if (PM_IS_ACTIVE()) {
		printk(KERN_NOTICE "apm: overridden by ACPI.\n");
		APM_INIT_ERROR_RETURN;
	}
	pm_active = 1;

	create_proc_info_entry("apm", 0, NULL, apm_get_info);

	misc_register(&apm_device);
	pm_power_off = pm_do_poweroff;

	clear_dpcsr();
	return 0;
}
Example #3
0
void __init iop_init(void)
{
	int i;

	if (iop_scc_present) {
		printk("IOP: detected SCC IOP at %p\n", iop_base[IOP_NUM_SCC]);
	}
	if (iop_ism_present) {
		printk("IOP: detected ISM IOP at %p\n", iop_base[IOP_NUM_ISM]);
		iop_start(iop_base[IOP_NUM_ISM]);
		iop_alive(iop_base[IOP_NUM_ISM]); /* clears the alive flag */
	}

	/* Make the whole pool available and empty the queues */

	for (i = 0 ; i < NUM_IOP_MSGS ; i++) {
		iop_msg_pool[i].status = IOP_MSGSTATUS_UNUSED;
	}

	for (i = 0 ; i < NUM_IOP_CHAN ; i++) {
		iop_send_queue[IOP_NUM_SCC][i] = 0;
		iop_send_queue[IOP_NUM_ISM][i] = 0;
		iop_listeners[IOP_NUM_SCC][i].devname = NULL;
		iop_listeners[IOP_NUM_SCC][i].handler = NULL;
		iop_listeners[IOP_NUM_ISM][i].devname = NULL;
		iop_listeners[IOP_NUM_ISM][i].handler = NULL;
	}

#if 0	/* Crashing in 2.4 now, not yet sure why.   --jmt */
#ifdef CONFIG_PROC_FS
	create_proc_info_entry("mac_iop", 0, &proc_root, iop_get_proc_info);
#endif
#endif
}
Example #4
0
void __init nubus_proc_init(void)
{
	if (!MACH_IS_MAC)
		return;
	proc_bus_nubus_dir = proc_mkdir("nubus", proc_bus);
	create_proc_info_entry("devices", 0, proc_bus_nubus_dir,
				get_nubus_dev_info);
	proc_bus_nubus_add_devices();
}
Example #5
0
/*
 * Function irda_proc_register (void)
 *
 *    Register irda entry in /proc file system
 *
 */
void irda_proc_register(void) 
{
	int i;

	proc_irda = proc_mkdir("net/irda", NULL);
	if (proc_irda == NULL)
		return;
	proc_irda->owner = THIS_MODULE;

	for (i=0;i<IRDA_ENTRIES_NUM;i++)
		create_proc_info_entry(dir[i].name,0,proc_irda,dir[i].fn);
}
Example #6
0
static int __init my_init( void )
{
	int	i;

	printk( "<1>\nInstalling \'%s\' module\n", modname );

	// initialize our 8-KB 'mod_buf[]' array with ascii data
	for (i = 0; i < 8; i++)
		memset( &mod_buf[ i * 1024 ], i + '0', 1024 );

	create_proc_info_entry( modname, 0, NULL, my_get_info );
	return	0;  //SUCCESS
}
Example #7
0
register_proc_files()
{
  test_dir = proc_mkdir("test_dir", &proc_root);
  if(!create_proc_info_entry("test", 0444, test_dir, test_proc_get_info))
    printk(KERN_DEBUG "TEST: Error creating /proc/test.");
  
  entry = create_proc_entry("test_rw", 0644, test_dir);
  
  entry->nlink = 1;
  entry->data = (void*) &varable1;
  entry->read_proc = test_proc_read;
  entry->write_proc = test_proc_write;
}
Example #8
0
static int hello_version_init(void)
{
	int error;
	error = 0;
	printk(KERN_ALERT "Hello %s. You are currently using Linux %s.\n",
		   qui, init_uts_ns.name.release);
	do_gettimeofday(&start);
	if (create_proc_info_entry("hello_version_elapsed", 0, NULL,
							   read_proc_elapsed) == NULL) {
		error=ENOMEM;
	}
	return error;
}
Example #9
0
/*
 * Initialize driver.
 */
int __init BuffaloCpuInterrupts_init(void)
{
	struct proc_dir_entry *buffalo_cpu_int_proc;
	TRACE(printk(">%s\n", __FUNCTION__));

	if (use_slide_power != 1) {
		buffalo_cpu_int_proc =
			create_proc_info_entry("buffalo/PowerSWInt_en",
					       0,
					       0,
					       CpuIntActivate_read_proc);
		if (buffalo_cpu_int_proc == NULL) {
			proc_mkdir("buffalo", 0);
			buffalo_cpu_int_proc =
				create_proc_info_entry("buffalo/PowerSWInt_en",
						       0,
						       0,
						       CpuIntActivate_read_proc);
		}

		BuffaloGpio_CPUInterruptsSetup();
		request_irq(PSW_IRQ, PowSwInterrupts, 0, "PowSw", NULL);
	}

	if (BIT_INIT >= 0) {
		BuffaloGpio_CPUInterruptsSetupInit();
		request_irq(INIT_IRQ, InitSwInterrupts, 0, "InitSw", NULL);
	}

	if (BIT_FUNC >= 0) {
		BuffaloGpio_CPUInterruptsSetupFunc();
		request_irq(FUNC_IRQ, FuncSwInterrupts, 0, "FuncSw", NULL);
	}

	printk("%s %s Ver.%s installed.\n", DRIVER_NAME, AUTHOR, BUFFALO_DRIVER_VER);
	return 0;
}
Example #10
0
int __init ircomm_init(void)
{
	ircomm = hashbin_new(HB_LOCAL); 
	if (ircomm == NULL) {
		ERROR("%s(), can't allocate hashbin!\n", __FUNCTION__);
		return -ENOMEM;
	}
	
#ifdef CONFIG_PROC_FS
	create_proc_info_entry("ircomm", 0, proc_irda, ircomm_proc_read);
#endif /* CONFIG_PROC_FS */
	
	MESSAGE("IrCOMM protocol (Dag Brattli)\n");
		
	return 0;
}
Example #11
0
static int __init h8_init(void)
{
        if(request_irq(h8_irq, h8_intr, SA_INTERRUPT, "h8", NULL))
        {
                printk(KERN_ERR "H8: error: IRQ %d is not free\n", h8_irq);
                return -EIO;
        }
        printk(KERN_INFO "H8 at 0x%x IRQ %d\n", h8_base, h8_irq);

        create_proc_info_entry("driver/h8", 0, NULL, h8_get_info);

        request_region(h8_base, 8, "h8");

	h8_alloc_queues();

	h8_hw_init();

	kernel_thread(h8_monitor_thread, NULL, 0);

        return 0;
}
Example #12
0
static int __init apm_emu_init(void)
{
	struct proc_dir_entry *apm_proc;

	if (sys_ctrler != SYS_CTRLER_PMU) {
		printk(KERN_INFO "apm_emu: Requires a machine with a PMU.\n");
		return -ENODEV;
	}
		
	apm_proc = create_proc_info_entry("apm", 0, NULL, apm_emu_get_info);
	if (apm_proc)
		SET_MODULE_OWNER(apm_proc);

	misc_register(&apm_device);

	pmu_register_sleep_notifier(&apm_sleep_notifier);

	printk(KERN_INFO "apm_emu: APM Emulation %s initialized.\n", driver_version);

	return 0;
}
Example #13
0
static
int __init bigphysarea_init(void)
{
    if (bigphysarea_pages == 0 || bigphysarea == 0)
        return -EINVAL;

    /* create to /proc entry for it */
    if (!create_proc_info_entry("bigphysarea",0444,&proc_root,get_info)) {
        // ohoh, no way to free the allocated memory!
        // continue without proc support, it not fatal in itself
//		free_bootmem((unsigned long)bigphysarea>>PAGE_SHIFT,bigphysarea_pages<<PAGE_SHIFT);
//		bigphysarea = 0;
//		return -ENOMEM;
    }

    init_level = 1;

    printk(KERN_INFO "bigphysarea: Allocated %d pages at 0x%p.\n",
           bigphysarea_pages, bigphysarea);

    return 0;
}
Example #14
0
int ppc405ez_dac_create_proc_entry(void)
{
	proc_driver = proc_mkdir("driver/ppc405ez_dac", NULL);

	if (proc_driver == NULL) {
		printk(KERN_ERR "%s: Error creating proc directory!\n",
		       __func__);
		return -ENOMEM;
	}

	proc_regs = create_proc_info_entry("registers", 0, proc_driver,
					   ppc405ez_dac_proc_regs);

	if (proc_regs == NULL) {
		printk(KERN_ERR "%s: Error while creating proc reg file!\n",
		       __func__);
		return -ENOMEM;
	}

	proc_driver->owner = THIS_MODULE;
	proc_regs->owner = THIS_MODULE;

	return 0;
}
Example #15
0
/* allocate the tables for the presto devices. We need
 * sizeof(proto_channel_table)/sizeof(proto_channel_table[0])
 * entries for each dev
 */
int /* __init */ init_intermezzo_sysctl(void)
{
	int i;
	int total_dev = MAX_CHANNEL;
	int entries_per_dev = sizeof(proto_psdev_table) /
		sizeof(proto_psdev_table[0]);
	int total_entries = entries_per_dev * total_dev;
	ctl_table *dev_ctl_table;

	PRESTO_ALLOC(dev_ctl_table, sizeof(ctl_table) * total_entries);

	if (! dev_ctl_table) {
		CERROR("WARNING: presto couldn't allocate dev_ctl_table\n");
		EXIT;
		return -ENOMEM;
	}

	/* now fill in the entries ... we put the individual presto<x>
	 * entries at the end of the table, and the per-presto stuff
	 * starting at the front.  We assume that the compiler makes
	 * this code more efficient, but really, who cares ... it
	 * happens once per reboot.
	 */
	for(i = 0; i < total_dev; i++) {
		void *p;

		/* entry for this /proc/sys/intermezzo/intermezzo"i" */
		ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT];
		/* entries for the individual "files" in this "directory" */
		ctl_table *psdev_entries = &dev_ctl_table[i * entries_per_dev];
		/* init the psdev and psdev_entries with the prototypes */
		*psdev = proto_channel_entry;
		memcpy(psdev_entries, proto_psdev_table,
		       sizeof(proto_psdev_table));
		/* now specialize them ... */
		/* the psdev has to point to psdev_entries, and fix the number */
		psdev->ctl_name = psdev->ctl_name + i + 1; /* sorry */

		PRESTO_ALLOC(p, PROCNAME_SIZE);
		psdev->procname = p;
		if (!psdev->procname) {
			PRESTO_FREE(dev_ctl_table,
				    sizeof(ctl_table) * total_entries);
			return -ENOMEM;
		}
		sprintf((char *) psdev->procname, "intermezzo%d", i);
		/* hook presto into */
		psdev->child = psdev_entries;

		/* now for each psdev entry ... */
		psdev_entries[0].data = &(izo_channels[i].uc_hard);
		psdev_entries[1].data = &(izo_channels[i].uc_no_filter);
		psdev_entries[2].data = &(izo_channels[i].uc_no_journal);
		psdev_entries[3].data = &(izo_channels[i].uc_no_upcall);
		psdev_entries[4].data = &(izo_channels[i].uc_timeout);
#ifdef PRESTO_DEBUG
		psdev_entries[5].data = &(izo_channels[i].uc_errorval);
#endif
	}


#ifdef CONFIG_SYSCTL
	if ( !intermezzo_table_header )
		intermezzo_table_header =
			register_sysctl_table(intermezzo_table, 0);
#endif
#ifdef CONFIG_PROC_FS
	proc_fs_intermezzo = proc_mkdir("intermezzo", proc_root_fs);
	proc_fs_intermezzo->owner = THIS_MODULE;
	create_proc_info_entry("mounts", 0, proc_fs_intermezzo, 
			       intermezzo_mount_get_info);
#endif
	return 0;
}
Example #16
0
void ide_pci_create_host_proc(const char *name, get_info_t *get_info)
{
	create_proc_info_entry(name, 0, proc_ide_root, get_info);
}
static int __init mwave_init(void)
{
	int i;
	int retval = 0;
	int resultMiscRegister;
	pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd;

	memset(&mwave_s_mdd, 0, sizeof(MWAVE_DEVICE_DATA));

	PRINTK_1(TRACE_MWAVE, "mwavedd::mwave_init entry\n");

	pDrvData->bBDInitialized = FALSE;
	pDrvData->bResourcesClaimed = FALSE;
	pDrvData->bDSPEnabled = FALSE;
	pDrvData->bDSPReset = FALSE;
	pDrvData->bMwaveDevRegistered = FALSE;
	pDrvData->sLine = -1;
	pDrvData->bProcEntryCreated = FALSE;

	for (i = 0; i < 16; i++) {
		pDrvData->IPCs[i].bIsEnabled = FALSE;
		pDrvData->IPCs[i].bIsHere = FALSE;
		pDrvData->IPCs[i].usIntCount = 0;	/* no ints received yet */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
		init_waitqueue_head(&pDrvData->IPCs[i].ipc_wait_queue);
#endif
	}

	retval = tp3780I_InitializeBoardData(&pDrvData->rBDData);
	PRINTK_2(TRACE_MWAVE,
		"mwavedd::mwave_init, return from tp3780I_InitializeBoardData retval %x\n",
		retval);
	if (retval) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd::mwave_init: Error: Failed to initialize board data\n");
		goto cleanup_error;
	}
	pDrvData->bBDInitialized = TRUE;

	retval = tp3780I_CalcResources(&pDrvData->rBDData);
	PRINTK_2(TRACE_MWAVE,
		"mwavedd::mwave_init, return from tp3780I_CalcResources retval %x\n",
		retval);
	if (retval) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd:mwave_init: Error: Failed to calculate resources\n");
		goto cleanup_error;
	}

	retval = tp3780I_ClaimResources(&pDrvData->rBDData);
	PRINTK_2(TRACE_MWAVE,
		"mwavedd::mwave_init, return from tp3780I_ClaimResources retval %x\n",
		retval);
	if (retval) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd:mwave_init: Error: Failed to claim resources\n");
		goto cleanup_error;
	}
	pDrvData->bResourcesClaimed = TRUE;

	retval = tp3780I_EnableDSP(&pDrvData->rBDData);
	PRINTK_2(TRACE_MWAVE,
		"mwavedd::mwave_init, return from tp3780I_EnableDSP retval %x\n",
		retval);
	if (retval) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd:mwave_init: Error: Failed to enable DSP\n");
		goto cleanup_error;
	}
	pDrvData->bDSPEnabled = TRUE;

	resultMiscRegister = misc_register(&mwave_misc_dev);
	if (resultMiscRegister < 0) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd:mwave_init: Error: Failed to register misc device\n");
		goto cleanup_error;
	}
	pDrvData->bMwaveDevRegistered = TRUE;

	pDrvData->sLine = register_serial_portandirq(
		pDrvData->rBDData.rDspSettings.usUartBaseIO,
		pDrvData->rBDData.rDspSettings.usUartIrq
	);
	if (pDrvData->sLine < 0) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd:mwave_init: Error: Failed to register serial driver\n");
		goto cleanup_error;
	}
	/* uart is registered */

	if (
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
		!create_proc_info_entry("mwave", 0, NULL, mwave_get_info)
#else
		proc_register(&proc_root, &mwave_proc)
#endif
	) {
		PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd::mwave_init: Error: Failed to register /proc/mwave\n");
		goto cleanup_error;
	}
	pDrvData->bProcEntryCreated = TRUE;

	/* SUCCESS! */
	return 0;

	cleanup_error:
	PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd::mwave_init: Error: Failed to initialize\n");
	mwave_exit(); /* clean up */

	return -EIO;
}
Example #18
0
static void ecard_proc_init(void)
{
	proc_bus_ecard_dir = proc_mkdir("ecard", proc_bus);
	create_proc_info_entry("devices", 0, proc_bus_ecard_dir,
		get_ecard_dev_info);
}
Example #19
0
//----------------------------------------------------------------------
int __init buffaloLedDriver_init (void)
{
    int i;
    char buf[1024];
    struct proc_dir_entry *pde;

    FUNCTRACE(printk("%s > Entered.\n",__FUNCTION__));

    BuffaloGpio_Init();
    pde = proc_mkdir("buffalo/gpio", 0);
    pde = proc_mkdir("buffalo/gpio/led", 0);
    pde = proc_mkdir("buffalo/gpio/switch", 0);
    pde = proc_mkdir("buffalo/gpio/fan", 0);
    pde = proc_mkdir("buffalo/gpio/power_control", 0);
    pde = create_proc_info_entry ("buffalo/power_sw", 0, 0, gpio_power_read_proc);

    pde = create_proc_entry("buffalo/gpio/led/all", 0, 0);
    pde->read_proc = BuffaloAllLedReadProc;
    pde->write_proc= BuffaloAllLedWriteProc;

    pde = create_proc_entry("buffalo/cpu_status", 0, 0);
    pde->read_proc = BuffaloCpuStatusReadProc;
    pde->write_proc = BuffaloCpuStatusWriteProc;


    if (BIT_LED_ALARM >= 0) {
        BuffaloGpio_AlarmLedDisable();

        pde = create_proc_entry("buffalo/gpio/led/alarm", 0, 0);
        pde->read_proc = BuffaloLedReadProc;
        pde->write_proc = BuffaloLedWriteProc;
        alarmLed.mppNumber = BIT_LED_ALARM;
        pde->data = &alarmLed;

        pde = create_proc_entry("buffalo/gpio/led/alarm_blink", 0, 0);
        pde->read_proc = BuffaloLedBlinkReadProc;
        pde->write_proc = BuffaloLedBlinkWriteProc;
        pde->data = &alarmLed;
    }

    if (BIT_LED_INFO >= 0) {
        BuffaloGpio_InfoLedDisable();

        pde = create_proc_entry("buffalo/gpio/led/info", 0, 0);
        pde->read_proc = BuffaloLedReadProc;
        pde->write_proc = BuffaloLedWriteProc;
        infoLed.mppNumber = BIT_LED_INFO;
        pde->data = &infoLed;

        pde = create_proc_entry("buffalo/gpio/led/info_blink", 0, 0);
        pde->read_proc = BuffaloLedBlinkReadProc;
        pde->write_proc = BuffaloLedBlinkWriteProc;
        pde->data = &infoLed;
    }

    if (BIT_LED_PWR >= 0) {
        BuffaloGpio_PowerLedEnable();

        pde = create_proc_entry("buffalo/gpio/led/power", 0, 0);
        pde->read_proc = BuffaloLedReadProc;
        pde->write_proc = BuffaloLedWriteProc;
        powerLed.mppNumber = BIT_LED_PWR;
        pde->data = &powerLed;

        pde = create_proc_entry("buffalo/gpio/led/power_blink", 0, 0);
        pde->read_proc = BuffaloLedBlinkReadProc;
        pde->write_proc = BuffaloLedBlinkWriteProc;
        pde->data = &powerLed;
    }

    if (BIT_LED_FUNC >= 0) {
        BuffaloGpio_FuncLedDisable();

        pde = create_proc_entry("buffalo/gpio/led/func", 0, 0);
        pde->read_proc = BuffaloLedReadProc;
        pde->write_proc = BuffaloLedWriteProc;
        funcLed.mppNumber = BIT_LED_FUNC;
        pde->data = &funcLed;

        pde = create_proc_entry("buffalo/gpio/led/func_blink", 0, 0);
        pde->read_proc = BuffaloLedBlinkReadProc;
        pde->write_proc = BuffaloLedBlinkWriteProc;
        pde->data = &funcLed;
    }

    if (BIT_LED_ETH >= 0) {
        pde = create_proc_entry("buffalo/gpio/led/eth", 0, 0);
        pde->read_proc = BuffaloEthLedReadProc;
        pde->write_proc = BuffaloEthLedWriteProc;
    }


    for (i=0; i<BUF_NV_SIZE_BIT_HDD_POWER; i++) {
        if (bitHddPower[i] < 0)
            continue;

        sprintf(buf, "buffalo/gpio/power_control/hdd%d", i);
        pde = create_proc_entry(buf, 0, 0);
        if (pde != NULL) {
            pde->read_proc = BuffaloHddReadProc;
            pde->write_proc= BuffaloHddWriteProc;
            pde->owner = THIS_MODULE;
            pde->data = (void *)i;
        }
    }

    for (i=0; i<BUF_NV_SIZE_BIT_USB_POWER; i++) {
        if (bitUsbPower[i] < 0)
            continue;

        sprintf(buf, "buffalo/gpio/power_control/usb%d", i);
        pde = create_proc_entry(buf, 0, NULL);
        if (pde != NULL) {
            pde->read_proc = BuffaloUsbReadProc;
            pde->write_proc = BuffaloUsbWriteProc;
            pde->owner = THIS_MODULE;
            pde->data = (void *)i;
        }
    }

    if (use_slide_power == 1) {
        pde = create_proc_entry("buffalo/gpio/switch/power", 0, 0);
        pde->read_proc = BuffaloPowerReadProc;
//		pde->write_proc = BuffaloPowerReadProc;

        pde = create_proc_info_entry("buffalo/gpio/switch/slide_switch", 0, 0, BuffaloSlideSwitchReadProc);
    }


    if (BIT_AUTO_POWER >= 0) {
        pde = create_proc_entry("buffalo/gpio/switch/auto_power", 0, 0);
        pde->read_proc = BuffaloAutoPowerReadProc;
//		pde->write_proc = BuffaloAutoPowerReadProc;
    }

    if (use_slide_power == 1 || BIT_AUTO_POWER >= 0) {
        pde = create_proc_entry("buffalo/gpio/switch/sw_control", 0, 0);
        pde->read_proc = BuffaloSwPollingReadProc;
        pde->write_proc = BuffaloSwPollingWriteProc;
    }

    if (BIT_FUNC >= 0) {
        pde = create_proc_entry("buffalo/gpio/switch/func", 0, 0);
        pde->read_proc = BuffaloFuncReadProc;
        //		pde->write_proc= BuffaloFuncReadProc;
    }

    if (BIT_FAN_LOW >= 0 && BIT_FAN_HIGH) {
        pde = create_proc_entry("buffalo/gpio/fan/control", 0, 0);
        pde->read_proc = BuffaloFanControlReadProc;
        pde->write_proc= BuffaloFanControlWriteProc;
    }

    if (BIT_FAN_LCK >= 0) {
        pde = create_proc_entry("buffalo/gpio/fan/lock", 0, 0);
        pde->read_proc = BuffaloFanStatusReadProc;
        pde->write_proc= BuffaloFanStatusWriteProc;
    }

    pde = create_proc_entry("buffalo/gpio/data_out_register", 0, 0);
    pde->read_proc = BuffaloGpioRegisterReadProc;
    pde->write_proc= BuffaloGpioRegisterWriteProc;
    pde->data = (void *)GPP_DATA_OUT_REG(0);

    pde = create_proc_entry("buffalo/gpio/data_out_enable_register", 0, 0);
    pde->read_proc = BuffaloGpioRegisterReadProc;
    pde->write_proc= BuffaloGpioRegisterWriteProc;
    pde->data = (void *)GPP_DATA_OUT_EN_REG(0);

    pde = create_proc_entry("buffalo/gpio/blink_enable_register", 0, 0);
    pde->read_proc = BuffaloGpioRegisterReadProc;
    pde->write_proc= BuffaloGpioRegisterWriteProc;
    pde->data = (void *)GPP_BLINK_EN_REG(0);

    pde = create_proc_entry("buffalo/gpio/data_in_polarity_register", 0, 0);
    pde->read_proc = BuffaloGpioRegisterReadProc;
    pde->write_proc= BuffaloGpioRegisterWriteProc;
    pde->data = (void *)GPP_DATA_IN_POL_REG(0);

    pde = create_proc_entry("buffalo/gpio/data_in_register", 0, 0);
    pde->read_proc = BuffaloGpioRegisterReadProc;
    pde->write_proc= BuffaloGpioRegisterWriteProc;
    pde->data = (void *)GPP_DATA_IN_REG(0);

    if (Buffalo_has_PM()) {
        for (i=0; i<4; i++) {
            sprintf(buf, "buffalo/gpio/power_control/hdd%d", i);
            pde = create_proc_entry(buf, 0, 0);
            if (pde != NULL) {
                pde->read_proc = BuffaloPMHddPowerReadProc;
                pde->write_proc= BuffaloPMHddPowerWriteProc;
                pde->owner = THIS_MODULE;
                pde->data = (void *)i;
            }

            sprintf(buf, "buffalo/gpio/led/pm_diag_led%d", i);
            pde = create_proc_entry(buf, 0, 0);
            if (pde != NULL) {
                pde->read_proc = BuffaloPMHddDiagLedReadProc;
                pde->write_proc= BuffaloPMHddDiagLedWriteProc;
                pde->owner = THIS_MODULE;
                pde->data = (void *)i;
            }
        }
    }

    printk("%s %s Ver.%s installed.\n", DRIVER_NAME, AUTHOR, BUFFALO_DRIVER_VER);
    return 0;
}