<free_dentries>
- Ported to kernel 2.4.0-test2-pre3
+===============================================================================
+Changes for patch v172
+
+Work sponsored by SGI
+
+- Changed interface to <devfs_register>
+
+- Changed interface to <devfs_register_series>
#define MCPCIA_MAX_HOSES 4
-static int mcpcia_hose_count; /* Actual number found. */
-
/*
* Given a bus, device, and function number, compute resulting
* configuration space address and setup the MCPCIA_HAXR2 register
* Window 2 is direct access 2GB at 2GB
* ??? We ought to scale window 1 with memory.
*/
+ hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
+ hose->sg_pci = iommu_arena_new(hose, 0x40000000, 0x08000000, 0);
- /* Make sure to align the arenas. */
- hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 1);
- hose->sg_pci = iommu_arena_new(hose, 0x40000000, 0x08000000, 1);
__direct_map_base = 0x80000000;
__direct_map_size = 0x80000000;
mcpcia_init_hoses(void)
{
struct pci_controler *hose;
+ int hose_count;
int h;
- mcpcia_hose_count = 0;
-
/* First, find how many hoses we have. */
+ hose_count = 0;
for (h = 0; h < MCPCIA_MAX_HOSES; ++h) {
if (mcpcia_probe_hose(h)) {
if (h != 0)
mcpcia_new_hose(h);
- mcpcia_hose_count++;
+ hose_count++;
}
}
- printk("mcpcia_init_hoses: found %d hoses\n", mcpcia_hose_count);
+ printk("mcpcia_init_hoses: found %d hoses\n", hose_count);
/* Now do init for each hose. */
for (hose = hose_head; hose; hose = hose->next)
mcpcia_print_system_area(unsigned long la_ptr)
{
struct el_common *frame;
- int i;
+ struct pci_controler *hose;
struct IOD_subpacket {
unsigned long base;
} *iodpp;
frame = (struct el_common *)la_ptr;
-
iodpp = (struct IOD_subpacket *) (la_ptr + frame->sys_offset);
- for (i = 0; i < mcpcia_hose_count; i++, iodpp++) {
+ for (hose = hose_head; hose; hose = hose->next, iodpp++) {
+
printk("IOD %d Register Subpacket - Bridge Base Address %16lx\n",
- i, iodpp->base);
+ hose->index, iodpp->base);
printk(" WHOAMI = %8x\n", iodpp->whoami);
printk(" PCI_REV = %8x\n", iodpp->pci_rev);
printk(" CAP_CTRL = %8x\n", iodpp->cap_ctrl);
#include "proto.h"
#include "pci_impl.h"
-int TITAN_bootcpu;
unsigned TITAN_agp = 0;
static struct
* address range.
*/
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
+ hose->sg_isa->align_entry = 8; /* 64KB for ISA */
+
hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x08000000, 0);
+ hose->sg_pci->align_entry = 4; /* Titan caches 4 PTEs at a time */
+
__direct_map_base = 0x40000000;
__direct_map_size = 0x80000000;
printk("%s: CSR_DREV 0x%lx\n", FN, TITAN_dchip->drev.csr);
#endif
- TITAN_bootcpu = __hard_smp_processor_id();
+ boot_cpuid = __hard_smp_processor_id();
/* With multiple PCI busses, we play with I/O as physical addrs. */
ioport_resource.end = ~0UL;
static void
select_smp_affinity(int irq)
{
- static int last_cpu = 0;
+ static int last_cpu;
int cpu = last_cpu + 1;
if (! irq_desc[irq].handler->set_affinity || irq_user_affinity[irq])
* all but one of which we want to go away. In a non-GENERIC kernel,
* we want only one, ever.
*
- * Accomplish this in the GENERIC kernel by puting all of the vectors
+ * Accomplish this in the GENERIC kernel by putting all of the vectors
* in the .init.data section where they'll go away. We'll copy the
* one we want to the real alpha_mv vector in setup_arch.
*
inner.mem_end -= inner.mem_start;
/* Align the sizes up by bridge rules */
- inner.io_end = ROUND_UP(inner.io_end, 4*1024);
- inner.mem_end = ROUND_UP(inner.mem_end, 1*1024*1024);
+ inner.io_end = ROUND_UP(inner.io_end, 4*1024) - 1;
+ inner.mem_end = ROUND_UP(inner.mem_end, 1*1024*1024) - 1;
/* Adjust the bridge's allocation requirements */
bridge->resource[0].end = bridge->resource[0].start + inner.io_end;
}
if (i < n) {
+ /* Reached the end. Flush the TLB and restart the
+ search from the beginning. */
+ alpha_mv.mv_pci_tbi(arena->hose, 0, -1);
+
p = 0, i = 0;
while (i < n && p+i < nent) {
if (ptes[p+i])
DBGA("pci_map_single: [%p,%lx] np %ld -> sg %x from %p\n",
cpu_addr, size, npages, ret, __builtin_return_address(0));
- alpha_mv.mv_pci_tbi(hose, ret, ret + size - 1);
return ret;
}
npages = calc_npages((dma_addr & ~PAGE_MASK) + size);
iommu_arena_free(arena, dma_ofs, npages);
+
+ /*
+ If we're freeing ptes above the `next_entry' pointer (they
+ may have snuck back into the TLB since the last wrap flush),
+ we need to flush the TLB before reallocating the latter.
+ */
+ if (dma_ofs >= arena->next_entry)
alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1);
DBGA("pci_unmap_single: sg [%x,%lx] np %ld from %p\n",
#endif
} while (++sg < end && (int) sg->dma_address < 0);
- alpha_mv.mv_pci_tbi(arena->hose, out->dma_address,
- out->dma_address+out->dma_length-1);
return 1;
}
if (fend < tend) fend = tend;
}
+ /*
+ If we're freeing ptes above the `next_entry' pointer (they
+ may have snuck back into the TLB since the last wrap flush),
+ we need to flush the TLB before reallocating the latter.
+ */
+ if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry)
alpha_mv.mv_pci_tbi(hose, fbeg, fend);
DBGA("pci_unmap_sg: %d entries\n", nents - (end - sg));
irq = (vector - 0x800) >> 4;
-#if 0
- printk("clipper_srm_device_interrupt: vector 0x%lx IRQ %d cpu %d\n",
- vector, irq, smp_processor_id());
-#endif
-
/*
* The SRM console reports PCI interrupts with a vector calculated by:
*
MICROCODE_MINOR);
error = 1;
}
- devfs_handle = devfs_register(NULL, "cpu/microcode", 0,
+ devfs_handle = devfs_register(NULL, "cpu/microcode",
DEVFS_FL_DEFAULT, 0, 0, S_IFREG | S_IRUSR | S_IWUSR,
- 0, 0, µcode_fops, NULL);
+ µcode_fops, NULL);
if (devfs_handle == NULL && error) {
printk(KERN_ERR "microcode: failed to devfs_register()\n");
return -EINVAL;
proc_root_mtrr->proc_fops = &mtrr_fops;
#endif
#ifdef CONFIG_DEVFS_FS
- devfs_handle = devfs_register (NULL, "cpu/mtrr", 0, DEVFS_FL_DEFAULT, 0, 0,
- S_IFREG | S_IRUGO | S_IWUSR, 0, 0,
+ devfs_handle = devfs_register (NULL, "cpu/mtrr", DEVFS_FL_DEFAULT, 0, 0,
+ S_IFREG | S_IRUGO | S_IWUSR,
&mtrr_fops, NULL);
#endif
init_table ();
if (devfs_register_chrdev(MAJOR_NR, "Joystick", &atari_joystick_fops))
printk("unable to get major %d for joystick devices\n", MAJOR_NR);
devfs_register_series (NULL, "joysticks/digital%u", 2, DEVFS_FL_DEFAULT,
- MAJOR_NR, 128, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ MAJOR_NR, 128, S_IFCHR | S_IRUSR | S_IWUSR,
&atari_joystick_fops, NULL);
return 0;
printk ("Couldn't create socket\n");
return ret;
}
- devfs_handle = devfs_register (NULL, "socksys", 0, DEVFS_FL_NONE,
+ devfs_handle = devfs_register (NULL, "socksys", DEVFS_FL_DEFAULT,
30, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&socksys_fops, NULL);
file = fcheck(ret);
/* N.B. Is this valid? Suppose the f_ops are in a module ... */
devfs_handle = devfs_mk_dir (NULL, "slm", 3, NULL);
devfs_register_series (devfs_handle, "%u", MAX_SLM, DEVFS_FL_DEFAULT,
- MAJOR_NR, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ MAJOR_NR, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&slm_fops, NULL);
return 0;
}
char name[16];
sprintf (name, "%d%s", drive, table[table_sup[UDP->cmos][i]]);
- devfs_register (devfs_handle, name, 0, DEVFS_FL_DEFAULT, MAJOR_NR,
+ devfs_register (devfs_handle, name, DEVFS_FL_DEFAULT, MAJOR_NR,
base_minor + (table_sup[UDP->cmos][i] << 2),
S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP |S_IWGRP,
- 0, 0, &floppy_fops, NULL);
+ &floppy_fops, NULL);
} while (table_sup[UDP->cmos][i++]);
}
}
devfs_handle = devfs_mk_dir (NULL, "loop", 0, NULL);
devfs_register_series (devfs_handle, "%u", max_loop, DEVFS_FL_DEFAULT,
MAJOR_NR, 0,
- S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,
+ S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
&lo_fops, NULL);
if ((max_loop < 1) || (max_loop > 255)) {
}
devfs_handle = devfs_mk_dir (NULL, "md", 0, NULL);
devfs_register_series (devfs_handle, "%u",MAX_MD_DEVS,DEVFS_FL_DEFAULT,
- MAJOR_NR, 0, S_IFBLK | S_IRUSR | S_IWUSR, 0, 0,
+ MAJOR_NR, 0, S_IFBLK | S_IRUSR | S_IWUSR,
&md_fops, NULL);
blk_dev[MD_MAJOR].queue = md_get_queue;
}
devfs_handle = devfs_mk_dir (NULL, "nbd", 0, NULL);
devfs_register_series (devfs_handle, "%u", MAX_NBD,
- DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUSR | S_IWUSR, 0, 0,
- &nbd_fops, NULL);
+ DEVFS_FL_DEFAULT, MAJOR_NR, 0,
+ S_IFBLK | S_IRUSR | S_IWUSR,
+ &nbd_fops, NULL);
return 0;
}
}
devfs_handle = devfs_mk_dir (NULL, "pg", 2, NULL);
devfs_register_series (devfs_handle, "%u", 4, DEVFS_FL_DEFAULT,
- major, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ major, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&pg_fops, NULL);
return 0;
}
devfs_handle = devfs_mk_dir (NULL, "pt", 2, NULL);
devfs_register_series (devfs_handle, "%u", 4, DEVFS_FL_DEFAULT,
- major, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ major, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&pt_fops, NULL);
devfs_register_series (devfs_handle, "%un", 4, DEVFS_FL_DEFAULT,
- major, 128, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ major, 128, S_IFCHR | S_IRUSR | S_IWUSR,
&pt_fops, NULL);
return 0;
}
devfs_handle = devfs_mk_dir (NULL, "rd", 0, NULL);
devfs_register_series (devfs_handle, "%u", NUM_RAMDISKS,
DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFBLK | S_IRUSR | S_IWUSR,
&fd_fops, NULL);
for (i = 0; i < NUM_RAMDISKS; i++)
return -EIO;
}
}
- devfs_register (NULL, "aztcd", 0, DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0, &azt_fops, NULL);
+ devfs_register (NULL, "aztcd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO, &azt_fops, NULL);
if (devfs_register_blkdev(MAJOR_NR, "aztcd", &azt_fops) != 0)
{
printk("aztcd: Unable to get major %d for Aztech CD-ROM\n",
}
else {
cdi->de =
- devfs_register (devfs_handle, vname, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, vname, DEVFS_FL_DEFAULT,
MAJOR (cdi->dev), MINOR (cdi->dev),
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO,
&cdrom_fops, NULL);
}
cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
MAJOR_NR);
return -EIO;
}
- devfs_register (NULL, "gscd", 0, DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0, &gscd_fops, NULL);
+ devfs_register (NULL, "gscd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO, &gscd_fops, NULL);
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
blksize_size[MAJOR_NR] = gscd_blocksizes;
printk(KERN_ERR "optcd: unable to get major %d\n", MAJOR_NR);
return -EIO;
}
- devfs_register (NULL, "optcd", 0, DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0, &opt_fops, NULL);
+ devfs_register (NULL, "optcd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO, &opt_fops, NULL);
hardsect_size[MAJOR_NR] = &hsecsize;
blksize_size[MAJOR_NR] = &blksize;
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
sprintf (nbuff, "c%dt%d/cd", SBPCD_ISSUE - 1, D_S[j].drv_id);
sbpcd_infop->de =
- devfs_register (devfs_handle, nbuff, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, nbuff, DEVFS_FL_DEFAULT,
MAJOR_NR, j, S_IFBLK | S_IRUGO | S_IWUGO,
- 0, 0, &cdrom_fops, NULL);
+ &cdrom_fops, NULL);
if (register_cdrom(sbpcd_infop))
{
printk(" sbpcd: Unable to register with Uniform CD-ROm driver\n");
}
printk(KERN_INFO "SJCD: Status: port=0x%x.\n", sjcd_base);
- devfs_register (NULL, "sjcd", 0, DEVFS_FL_DEFAULT, MAJOR_NR, 0,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0, &sjcd_fops, NULL);
+ devfs_register (NULL, "sjcd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO, &sjcd_fops, NULL);
sjcd_present++;
return( 0 );
printk("IRQ%d, ", tmp_irq);
printk("using %d byte buffer\n", sony_buffer_size);
- devfs_register (NULL, CDU535_HANDLE, 0,
+ devfs_register (NULL, CDU535_HANDLE,
DEVFS_FL_DEFAULT,
MAJOR_NR, 0,
S_IFBLK | S_IRUGO | S_IWUGO,
- 0, 0, &cdu_fops, NULL);
+ &cdu_fops, NULL);
if (devfs_register_blkdev(MAJOR_NR, CDU535_HANDLE, &cdu_fops)) {
printk("Unable to get major %d for %s\n",
MAJOR_NR, CDU535_MESSAGE_NAME);
printk("DSP56k driver: Unable to register driver\n");
return -ENODEV;
}
- devfs_handle = devfs_register (NULL, "dsp56k", 0, DEVFS_FL_NONE,
+ devfs_handle = devfs_register (NULL, "dsp56k", DEVFS_FL_DEFAULT,
DSP56K_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&dsp56k_fops, NULL);
dsp56k.in_use = 0;
}
if (dtlk_dev_probe() == 0)
printk(", MAJOR %d\n", dtlk_major);
- devfs_handle = devfs_register (NULL, "dtlk", 0, DEVFS_FL_NONE,
+ devfs_handle = devfs_register (NULL, "dtlk", DEVFS_FL_DEFAULT,
dtlk_major, DTLK_MINOR,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&dtlk_fops, NULL);
init_timer(&dtlk_timer);
char devname[9];
sprintf (devname, "qft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
sprintf (devname, "nqft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i + 4,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
sprintf (devname, "zqft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i + 16,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
sprintf (devname, "nzqft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i + 20,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
sprintf (devname, "rawqft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i + 32,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
sprintf (devname, "nrawqft%i", i);
- devfs_register (NULL, devname, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, devname, DEVFS_FL_DEFAULT,
QIC117_TAPE_MAJOR, i + 36,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&zft_cdev, NULL);
}
#ifdef CONFIG_DEVFS_FS
sprintf( name, "ipl%d", i );
i2BoardPtrTable[i]->devfs_ipl_handle =
- devfs_register (devfs_handle, name, 0,
- DEVFS_FL_NONE,
+ devfs_register (devfs_handle, name,
+ DEVFS_FL_DEFAULT,
IP2_IPL_MAJOR, 4 * i,
S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
- 0, 0, &ip2_ipl, NULL);
+ &ip2_ipl, NULL);
sprintf( name, "stat%d", i );
i2BoardPtrTable[i]->devfs_stat_handle =
- devfs_register (devfs_handle, name, 0,
- DEVFS_FL_NONE,
+ devfs_register (devfs_handle, name,
+ DEVFS_FL_DEFAULT,
IP2_IPL_MAJOR, 4 * i + 1,
S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
- 0, 0, &ip2_ipl, NULL);
+ &ip2_ipl, NULL);
for ( box = 0; box < ABS_MAX_BOXES; ++box )
{
devfs_handle = devfs_mk_dir (NULL, "staliomem", 9, NULL);
devfs_register_series (devfs_handle, "%u", 4, DEVFS_FL_DEFAULT,
STL_SIOMEMMAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&stli_fsiomem, NULL);
/*
lp_reset(nr);
sprintf (name, "%d", nr);
- devfs_register (devfs_handle, name, 0,
+ devfs_register (devfs_handle, name,
DEVFS_FL_DEFAULT, LP_MAJOR, nr,
- S_IFCHR | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFCHR | S_IRUGO | S_IWUGO,
&lp_fops, NULL);
printk(KERN_INFO "lp%d: using %s (%s).\n", nr, port->name,
int i;
for (i=0; i<(sizeof(list)/sizeof(*list)); i++)
- devfs_register (NULL, list[i].name, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, list[i].name, DEVFS_FL_NONE,
MEM_MAJOR, list[i].minor,
- list[i].mode | S_IFCHR, 0, 0,
+ list[i].mode | S_IFCHR,
list[i].fops, NULL);
}
if (!devfs_handle)
devfs_handle = devfs_mk_dir (NULL, "misc", 4, NULL);
misc->devfs_handle =
- devfs_register (devfs_handle, misc->name, 0, DEVFS_FL_NONE,
+ devfs_register (devfs_handle, misc->name, DEVFS_FL_NONE,
MISC_MAJOR, misc->minor,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
misc->fops, NULL);
/*
devfs_handle = devfs_mk_dir (NULL, "parports", 0, NULL);
devfs_register_series (devfs_handle, "%u", PARPORT_MAX,
DEVFS_FL_DEFAULT, PP_MAJOR, 0,
- S_IFCHR | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFCHR | S_IRUGO | S_IWUGO,
&pp_fops, NULL);
printk (KERN_INFO PP_VERSION "\n");
devfs_handle = devfs_mk_dir (NULL, "staliomem", 9, NULL);
devfs_register_series (devfs_handle, "%u", 4, DEVFS_FL_DEFAULT,
STL_SIOMEMMAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&stl_fsiomem, NULL);
/*
#endif
return -ENODEV;
}
- devfs_register (NULL, "ntpqic11", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "ntpqic11", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 2,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "tpqic11", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "tpqic11", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 3,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "ntpqic24", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "ntpqic24", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 4,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "tpqic24", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "tpqic24", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 5,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "ntpqic120", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "ntpqic120", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 6,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "tpqic120", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "tpqic120", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 7,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "ntpqic150", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "ntpqic150", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 8,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
- devfs_register (NULL, "tpqic150", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "tpqic150", DEVFS_FL_DEFAULT,
QIC02_TAPE_MAJOR, 9,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
&qic02_tape_fops, NULL);
init_waitqueue_head(&qic02_tape_transfer);
/* prepare timer */
{
#ifdef CONFIG_DEVFS_FS
umode_t mode = S_IFCHR | S_IRUSR | S_IWUSR;
- uid_t uid = 0;
- gid_t gid = 0;
struct tty_struct tty;
char buf[32];
}
# ifdef CONFIG_UNIX98_PTYS
if ( (driver->major >= UNIX98_PTY_SLAVE_MAJOR) &&
- (driver->major < UNIX98_PTY_SLAVE_MAJOR + UNIX98_NR_MAJORS) ) {
- uid = current->uid;
- gid = current->gid;
- }
+ (driver->major < UNIX98_PTY_SLAVE_MAJOR + UNIX98_NR_MAJORS) )
+ flags |= DEVFS_FL_CURRENT_OWNER;
# endif
- devfs_register (NULL, tty_name (&tty, buf), 0,flags | DEVFS_FL_DEFAULT,
- driver->major, minor, mode, uid, gid,
- &tty_fops, NULL);
+ devfs_register (NULL, tty_name (&tty, buf), flags | DEVFS_FL_DEFAULT,
+ driver->major, minor, mode, &tty_fops, NULL);
#endif /* CONFIG_DEVFS_FS */
}
}
else
{
- devfs_register (devfs_handle, name + 1, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, name + 1, DEVFS_FL_DEFAULT,
VCS_MAJOR, index + 1,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0, &vcs_fops, NULL);
- devfs_register (devfs_handle, name, 0, DEVFS_FL_DEFAULT,
+ S_IFCHR | S_IRUSR | S_IWUSR, &vcs_fops, NULL);
+ devfs_register (devfs_handle, name, DEVFS_FL_DEFAULT,
VCS_MAJOR, index + 129,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0, &vcs_fops, NULL);
+ S_IFCHR | S_IRUSR | S_IWUSR, &vcs_fops, NULL);
}
#endif /* CONFIG_DEVFS_FS */
}
printk("unable to get major %d for vcs device", VCS_MAJOR);
devfs_handle = devfs_mk_dir (NULL, "vcc", 3, NULL);
- devfs_register (devfs_handle, "0", 1, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, "0", DEVFS_FL_DEFAULT,
VCS_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0, &vcs_fops, NULL);
- devfs_register (devfs_handle, "a", 1, DEVFS_FL_DEFAULT,
+ S_IFCHR | S_IRUSR | S_IWUSR, &vcs_fops, NULL);
+ devfs_register (devfs_handle, "a", DEVFS_FL_DEFAULT,
VCS_MAJOR, 128,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0, &vcs_fops, NULL);
+ S_IFCHR | S_IRUSR | S_IWUSR, &vcs_fops, NULL);
return error;
}
* has serious privacy issues.
*/
vfd->devfs_handle =
- devfs_register (NULL, name, 0, DEVFS_FL_DEFAULT,
+ devfs_register (NULL, name, DEVFS_FL_DEFAULT,
VIDEO_MAJOR, vfd->minor,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&video_fops, NULL);
#if defined(CONFIG_PROC_FS) && defined(CONFIG_VIDEO_PROC_FS)
if (!CDROM_CONFIG_FLAGS (drive)->close_tray)
devinfo->mask |= CDC_CLOSE_TRAY;
- devinfo->de = devfs_register(drive->de, "cd", 2, DEVFS_FL_DEFAULT,
+ devinfo->de = devfs_register(drive->de, "cd", DEVFS_FL_DEFAULT,
HWIF(drive)->major, minor,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO,
ide_fops, NULL);
return register_cdrom(devinfo);
idetape_setup (drive, tape, minor);
idetape_chrdevs[minor].drive = drive;
tape->de_r =
- devfs_register (drive->de, "mt", 2, DEVFS_FL_DEFAULT,
+ devfs_register (drive->de, "mt", DEVFS_FL_DEFAULT,
HWIF(drive)->major, minor,
- S_IFCHR | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFCHR | S_IRUGO | S_IWUGO,
&idetape_fops, NULL);
tape->de_n =
- devfs_register (drive->de, "mtn", 3, DEVFS_FL_DEFAULT,
+ devfs_register (drive->de, "mtn", DEVFS_FL_DEFAULT,
HWIF(drive)->major, minor + 128,
- S_IFCHR | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFCHR | S_IRUGO | S_IWUGO,
&idetape_fops, NULL);
devfs_register_tape (tape->de_r);
supported++; failed--;
devfs_register_series (NULL, "capi/r%u", CAPINC_NR_PORTS,
DEVFS_FL_DEFAULT,
capi_rawmajor, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&capinc_raw_fops, NULL);
#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- devfs_register (NULL, "isdn/capi20", 0, DEVFS_FL_DEFAULT,
- capi_major, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ devfs_register (NULL, "isdn/capi20", DEVFS_FL_DEFAULT,
+ capi_major, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&capi_fops, NULL);
printk(KERN_NOTICE "capi20: started up with major %d\n", capi_major);
sprintf (buf, "isdn%d", k);
dev->devfs_handle_isdnX[k] =
- devfs_register (devfs_handle, buf, 0, DEVFS_FL_DEFAULT,
- ISDN_MAJOR, ISDN_MINOR_B + k,0600 | S_IFCHR, 0, 0,
+ devfs_register (devfs_handle, buf, DEVFS_FL_DEFAULT,
+ ISDN_MAJOR, ISDN_MINOR_B + k,0600 | S_IFCHR,
&isdn_fops, NULL);
sprintf (buf, "isdnctrl%d", k);
dev->devfs_handle_isdnctrlX[k] =
- devfs_register (devfs_handle, buf, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, buf, DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_CTRL + k, 0600 | S_IFCHR,
- 0, 0, &isdn_fops, NULL);
+ &isdn_fops, NULL);
}
static void isdn_unregister_devfs(int k)
sprintf (buf, "ippp%d", i);
dev->devfs_handle_ipppX[i] =
- devfs_register (devfs_handle, buf, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, buf, DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_PPP + i,
- 0600 | S_IFCHR, 0, 0, &isdn_fops, NULL);
+ 0600 | S_IFCHR, &isdn_fops, NULL);
}
# endif
dev->devfs_handle_isdninfo =
- devfs_register (devfs_handle, "isdninfo", 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, "isdninfo", DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_STATUS, 0600 | S_IFCHR,
- 0, 0, &isdn_fops, NULL);
+ &isdn_fops, NULL);
dev->devfs_handle_isdnctrl =
- devfs_register (devfs_handle, "isdnctrl", 0, DEVFS_FL_DEFAULT,
- ISDN_MAJOR, ISDN_MINOR_CTRL, 0600 | S_IFCHR, 0, 0,
+ devfs_register (devfs_handle, "isdnctrl", DEVFS_FL_DEFAULT,
+ ISDN_MAJOR, ISDN_MINOR_CTRL, 0600 | S_IFCHR,
&isdn_fops, NULL);
}
if (devfs_register_chrdev(ADB_MAJOR, "adb", &adb_fops))
printk(KERN_ERR "adb: unable to get major %d\n", ADB_MAJOR);
else
- devfs_register (NULL, "adb", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "adb", DEVFS_FL_DEFAULT,
ADB_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&adb_fops, NULL);
}
err = devfs_register_chrdev(PPP_MAJOR, "ppp", &ppp_device_fops);
if (err)
printk(KERN_ERR "failed to register PPP device (%d)\n", err);
- devfs_handle = devfs_register(NULL, "ppp", 0, DEVFS_FL_NONE,
+ devfs_handle = devfs_register(NULL, "ppp", DEVFS_FL_DEFAULT,
PPP_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&ppp_device_fops, NULL);
return 0;
devfs_handle = devfs_mk_dir (NULL, "cosa", 4, NULL);
devfs_register_series (devfs_handle, "%u", nr_cards, DEVFS_FL_DEFAULT,
cosa_major, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&cosa_fops, NULL);
if (!nr_cards) {
printk(KERN_WARNING "cosa: no devices found.\n");
dasd_info[di]->info.devno,'\0' );
dasd_info[di] -> devfs_entry =
devfs_register ( NULL /* dir */,
- name, strlen(name),
- 0 /* flags */,
+ name,
+ DEVFS_FL_DEFAULT /* flags */,
DASD_MAJOR, minor,
0755 /* mode */,
- 0 /* uid */ , 0 /* gid */,
&dasd_device_operations,
(void *)dasd_info[di]);
}
for (i=0; i < sizeof (dev_list) / sizeof (*dev_list); i++) {
sparcaudio_mkname (name_buf, dev_list[i].name, dev);
minor = (dev << SPARCAUDIO_DEVICE_SHIFT) | dev_list[i].minor;
- devfs_register (devfs_handle, name_buf, 0, DEVFS_FL_NONE,
+ devfs_register (devfs_handle, name_buf, DEVFS_FL_NONE,
SOUND_MAJOR, minor, S_IFCHR | dev_list[i].mode,
- 0, 0, &sparcaudio_fops, NULL);
+ &sparcaudio_fops, NULL);
}
/* Setup the circular queues of output and input buffers
}
devfs_handle = devfs_mk_dir (NULL, "bpp", 3, NULL);
devfs_register_series (devfs_handle, "%u", BPP_NO, DEVFS_FL_DEFAULT,
- BPP_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ BPP_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&bpp_fops, NULL);
return 0;
spin_unlock_irq(&sunkbd_lock);
/* Register the /dev/kbd interface */
- devfs_register (NULL, "kbd", 0, DEVFS_FL_NONE,
+ devfs_register (NULL, "kbd", DEVFS_FL_DEFAULT,
KBD_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
&kbd_fops, NULL);
if (devfs_register_chrdev (KBD_MAJOR, "kbd", &kbd_fops)){
printk ("Could not register /dev/kbd device\n");
return -EIO;
sprintf (devname, "%d", instance);
- dev->de = devfs_register (devfs_handle, devname, 0, DEVFS_FL_DEFAULT,
+ dev->de = devfs_register (devfs_handle, devname, DEVFS_FL_DEFAULT,
VFC_MAJOR, instance,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&vfc_fops, NULL);
return 0;
}
sdp->detached = 0;
sdp->sg_tablesize = scsidp->host ? scsidp->host->sg_tablesize : 0;
sdp->i_rdev = MKDEV(SCSI_GENERIC_MAJOR, k);
- sdp->de = devfs_register (scsidp->de, "generic", 7, DEVFS_FL_NONE,
+ sdp->de = devfs_register (scsidp->de, "generic", DEVFS_FL_DEFAULT,
SCSI_GENERIC_MAJOR, k,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
&sg_fops, NULL);
sg_template.nr_dev++;
sg_dev_arr[k] = sdp;
sprintf(name, "sr%d", i);
strcpy(scsi_CDs[i].cdi.name, name);
scsi_CDs[i].cdi.de =
- devfs_register (scsi_CDs[i].device->de, "cd", 2,
+ devfs_register (scsi_CDs[i].device->de, "cd",
DEVFS_FL_DEFAULT, MAJOR_NR, i,
- S_IFBLK | S_IRUGO | S_IWUGO, 0, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO,
&cdrom_fops, NULL);
register_cdrom(&scsi_CDs[i].cdi);
}
/* Rewind entry */
sprintf (name, "mt%s", formats[mode]);
tpnt->de_r[mode] =
- devfs_register (SDp->de, name, 0, DEVFS_FL_DEFAULT,
+ devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
MAJOR_NR, i + (mode << 5),
S_IFCHR | S_IRUGO | S_IWUGO,
- 0, 0, &st_fops, NULL);
+ &st_fops, NULL);
/* No-rewind entry */
sprintf (name, "mt%sn", formats[mode]);
tpnt->de_n[mode] =
- devfs_register (SDp->de, name, 0, DEVFS_FL_DEFAULT,
+ devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
MAJOR_NR, i + (mode << 5) + 128,
S_IFCHR | S_IRUGO | S_IWUGO,
- 0, 0, &st_fops, NULL);
+ &st_fops, NULL);
}
devfs_register_tape (tpnt->de_r[0]);
tpnt->device = SDp;
{
printk ("SHMIQ setup\n");
devfs_register_chrdev(SHMIQ_MAJOR, "shmiq", &shmiq_fops);
- devfs_register (NULL, "shmiq", 0, DEVFS_FL_DEFAULT,
- SHMIQ_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ devfs_register (NULL, "shmiq", DEVFS_FL_DEFAULT,
+ SHMIQ_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR,
&shmiq_fops, NULL);
devfs_register_series (NULL, "qcntl%u", 2, DEVFS_FL_DEFAULT,
SHMIQ_MAJOR, 1,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&shmiq_fops, NULL);
}
sprintf (name_buf, "%s", name);
else
sprintf (name_buf, "%s%d", name, (r - low) / SOUND_STEP);
- s->de = devfs_register (devfs_handle, name_buf, 0,
+ s->de = devfs_register (devfs_handle, name_buf,
DEVFS_FL_NONE, SOUND_MAJOR, s->unit_minor,
- S_IFCHR | mode, 0, 0, fops, NULL);
+ S_IFCHR | mode, fops, NULL);
return r;
}
for (j = 0; j < num || j == 0; j++) {
soundcard_make_name (name_buf, dev_list[i].name, j);
if (do_register)
- devfs_register (NULL, name_buf, 0, DEVFS_FL_NONE,
+ devfs_register (NULL, name_buf, DEVFS_FL_NONE,
SOUND_MAJOR, dev_list[i].minor+ (j* 0x10),
- S_IFCHR | dev_list[i].mode, 0, 0,
+ S_IFCHR | dev_list[i].mode,
&oss_sound_fops, NULL);
else {
devfs_handle_t de;
{
char devfs_name[16];
sprintf(devfs_name, name, minor);
- return devfs_register(input_devfs_handle, devfs_name, 0, DEVFS_FL_DEFAULT, INPUT_MAJOR, minor + minor_base,
- S_IFCHR | S_IRUGO | S_IWUSR, 0, 0, &input_fops, NULL);
+ return devfs_register(input_devfs_handle, devfs_name, DEVFS_FL_DEFAULT, INPUT_MAJOR, minor + minor_base,
+ S_IFCHR | S_IRUGO | S_IWUSR, &input_fops, NULL);
}
void input_unregister_minor(devfs_handle_t handle)
}
sprintf (name_buf, "%d", i);
fb_info->devfs_handle =
- devfs_register (devfs_handle, name_buf, 0, DEVFS_FL_NONE,
- FB_MAJOR, i, S_IFCHR | S_IRUGO | S_IWUGO, 0, 0,
+ devfs_register (devfs_handle, name_buf, DEVFS_FL_DEFAULT,
+ FB_MAJOR, i, S_IFCHR | S_IRUGO | S_IWUGO,
&fb_fops, NULL);
return 0;
devfs_handle = devfs_mk_dir (NULL, "coda", 4, NULL);
devfs_register_series (devfs_handle, "%u", MAX_CODADEVS, DEVFS_FL_NONE,
CODA_PSDEV_MAJOR, 0,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&coda_psdev_fops, NULL);
memset(&coda_upc_comm, 0, sizeof(coda_upc_comm));
memset(&coda_super_info, 0, sizeof(coda_super_info));
<free_dentries>.
Work sponsored by SGI.
v0.100
+ 20000621 Richard Gooch <rgooch@atnf.csiro.au>
+ Changed interface to <devfs_register>.
+ Work sponsored by SGI.
+ v0.101
*/
#include <linux/types.h>
#include <linux/errno.h>
#include <asm/bitops.h>
#include <asm/atomic.h>
-#define DEVFS_VERSION "0.100 (20000619)"
+#define DEVFS_VERSION "0.101 (20000621)"
#define DEVFS_NAME "devfs"
* @dir: The handle to the parent devfs directory entry. If this is %NULL the
* new name is relative to the root of the devfs.
* @name: The name of the entry.
- * @namelen: The number of characters in @name, not including a %NULL
- * terminator. If this is 0, then @name must be %NULL-terminated and the
- * length is computed internally.
* @flags: A set of bitwise-ORed flags (DEVFS_FL_*).
* @major: The major number. Not needed for regular files.
* @minor: The minor number. Not needed for regular files.
* @mode: The default file mode.
- * @uid: The default UID of the file.
- * @guid: The default GID of the file.
* @ops: The &file_operations or &block_device_operations structure.
* This must not be externally deallocated.
* @info: An arbitrary pointer which will be written to the @private_data
* On failure %NULL is returned.
*/
-devfs_handle_t devfs_register (devfs_handle_t dir,
- const char *name, unsigned int namelen,
+devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
unsigned int flags,
unsigned int major, unsigned int minor,
- umode_t mode, uid_t uid, gid_t gid,
- void *ops, void *info)
+ umode_t mode, void *ops, void *info)
{
int is_new;
struct devfs_entry *de;
DEVFS_NAME, name);
return NULL;
}
- if (namelen < 1) namelen = strlen (name);
if ( S_ISCHR (mode) && (flags & DEVFS_FL_AUTO_DEVNUM) )
{
if (next_devnum_char >= MAX_DEVNUM)
minor = next_devnum_block & 0xff;
++next_devnum_block;
}
- de = search_for_entry (dir, name, namelen, TRUE, TRUE, &is_new, FALSE);
+ de = search_for_entry (dir, name, strlen (name), TRUE, TRUE, &is_new,
+ FALSE);
if (de == NULL)
{
printk ("%s: devfs_register(): could not create entry: \"%s\"\n",
}
de->info = info;
de->mode = mode;
- de->u.fcb.default_uid = uid;
- de->u.fcb.default_gid = gid;
+ if (flags & DEVFS_FL_CURRENT_OWNER)
+ {
+ de->u.fcb.default_uid = current->uid;
+ de->u.fcb.default_gid = current->gid;
+ }
+ else
+ {
+ de->u.fcb.default_uid = 0;
+ de->u.fcb.default_gid = 0;
+ }
de->registered = TRUE;
de->u.fcb.ops = ops;
de->u.fcb.auto_owner = (flags & DEVFS_FL_AUTO_OWNER) ? TRUE : FALSE;
Created <_devfs_convert_name> and supported SCSI and IDE CD-ROMs
20000203 Richard Gooch <rgooch@atnf.csiro.au>
Changed operations pointer type to void *.
+ 20000621 Richard Gooch <rgooch@atnf.csiro.au>
+ Changed interface to <devfs_register_series>.
*/
#include <linux/module.h>
#include <linux/init.h>
* @major: The major number. Not needed for regular files.
* @minor_start: The starting minor number. Not needed for regular files.
* @mode: The default file mode.
- * @uid: The default UID of the file.
- * @guid: The default GID of the file.
* @ops: The &file_operations or &block_device_operations structure.
* This must not be externally deallocated.
* @info: An arbitrary pointer which will be written to the private_data
void devfs_register_series (devfs_handle_t dir, const char *format,
unsigned int num_entries, unsigned int flags,
unsigned int major, unsigned int minor_start,
- umode_t mode, uid_t uid, gid_t gid,
- void *ops, void *info)
+ umode_t mode, void *ops, void *info)
{
unsigned int count;
char devname[128];
for (count = 0; count < num_entries; ++count)
{
sprintf (devname, format, count);
- devfs_register (dir, devname, 0, flags, major, minor_start + count,
- mode, uid, gid, ops, info);
+ devfs_register (dir, devname, flags, major, minor_start + count,
+ mode, ops, info);
}
} /* End Function devfs_register_series */
EXPORT_SYMBOL(devfs_register_series);
devfs_flags |= DEVFS_FL_REMOVABLE;
sprintf (devname, "part%d", part);
dev->part[minor + part].de =
- devfs_register (dir, devname, 0, devfs_flags,
+ devfs_register (dir, devname, devfs_flags,
dev->major, minor + part,
- S_IFBLK | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFBLK | S_IRUSR | S_IWUSR,
dev->fops, NULL);
}
#ifndef __ARCH_ALPHA_CACHE_H
#define __ARCH_ALPHA_CACHE_H
-/* Bytes per L1 (data) cache line. Both EV4 and EV5 are write-through,
- read-allocate, direct-mapped, physical. */
-#define L1_CACHE_BYTES 32
+#include <linux/config.h>
+
+/* Bytes per L1 (data) cache line. */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EV6)
+# define L1_CACHE_BYTES 32 /* should be 64, but networking dies */
+#else
+/* Both EV4 and EV5 are write-through, read-allocate,
+ direct-mapped, physical.
+*/
+# define L1_CACHE_BYTES 32
+#endif
+
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#define DEVFS_FL_REMOVABLE 0x020 /* This is a removable media device */
#define DEVFS_FL_WAIT 0x040 /* Wait for devfsd to finish */
#define DEVFS_FL_NO_PERSISTENCE 0x080 /* Forget changes after unregister */
+#define DEVFS_FL_CURRENT_OWNER 0x100 /* Set initial ownership to current */
#define DEVFS_FL_DEFAULT DEVFS_FL_NONE
#ifdef CONFIG_DEVFS_FS
-extern devfs_handle_t devfs_register (devfs_handle_t dir,
- const char *name, unsigned int namelen,
+extern devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
unsigned int flags,
unsigned int major, unsigned int minor,
- umode_t mode, uid_t uid, gid_t gid,
- void *ops, void *info);
+ umode_t mode, void *ops, void *info);
extern void devfs_unregister (devfs_handle_t de);
extern int devfs_mk_symlink (devfs_handle_t dir,
const char *name, unsigned int namelen,
unsigned int num_entries,
unsigned int flags, unsigned int major,
unsigned int minor_start,
- umode_t mode, uid_t uid, gid_t gid,
- void *ops, void *info);
+ umode_t mode, void *ops, void *info);
extern int init_devfs_fs (void);
extern void mount_devfs_fs (void);
#else /* CONFIG_DEVFS_FS */
static inline devfs_handle_t devfs_register (devfs_handle_t dir,
const char *name,
- unsigned int namelen,
unsigned int flags,
unsigned int major,
unsigned int minor,
umode_t mode,
- uid_t uid, gid_t gid,
void *ops, void *info)
{
return NULL;
unsigned int flags,
unsigned int major,
unsigned int minor_start,
- umode_t mode, uid_t uid, gid_t gid,
- void *ops, void *info)
+ umode_t mode, void *ops, void *info)
{
return;
}
static void __init make_devfs_entries (const char *name, int minor)
{
- devfs_register (devfs_handle, name, 0, DEVFS_FL_DEFAULT,
+ devfs_register (devfs_handle, name, DEVFS_FL_DEFAULT,
NETLINK_MAJOR, minor,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&netlink_fops, NULL);
}
make_devfs_entries ("IP6_FW", 13);
devfs_register_series (devfs_handle, "tap%u", 16, DEVFS_FL_DEFAULT,
NETLINK_MAJOR, 16,
- S_IFCHR | S_IRUSR | S_IWUSR, 0, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR,
&netlink_fops, NULL);
return 0;
}