public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Bert Thomas <bert@brothom.nl>
To: linux-kernel@vger.kernel.org
Subject: PCI device driver writing newbie trouble
Date: Thu, 20 Apr 2006 16:04:07 +0100	[thread overview]
Message-ID: <4447A2E7.6000407@brothom.nl> (raw)

Hi All,

I'm attempting to write a PCI device driver. I've read chapters 2, 9 and 
12 of the linux device driver book (3rd ed) and it got me going with the 
code below. However, I never see the message printed from cif50_probe, 
so appearantly the kernel doesn't consider my driver the correct driver 
for the hardware.

I tried to load the driver with insmod, but I also rebooted the system 
in the hope that some part of the kernel would find the hardware and try 
to load my driver. Is that how it is supposed to work? At least my 
driver is listed in /lib/modules/2.6.15.7/modules.pcimap. Modprobe 
doesn't find it, I don't know why. The hardware contains a PLX chip. The 
hardware is found by the kernel, as it correctly shows up in /proc/pci:

   Bus  1, device  13, function  0:
     Class 0680: PCI device 10b5:9050 (rev 1).
       IRQ 5.
       Non-prefetchable 32 bit memory at 0xd1005000 [0xd100507f].
       I/O at 0xd100 [0xd17f].
       Non-prefetchable 32 bit memory at 0xd1000000 [0xd1001fff].

Also in the corresponding /sys files.

Does anyone have a suggestion why my probe function is not being called?

TIA
Bert

#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
MODULE_LICENSE("Dual BSD/GPL");

static const struct pci_device_id cif50_ids[] = {
         {
         .vendor = 0x10B5,
         .device = 0x9050,
         .subvendor = PCI_ANY_ID, //0x10B5,
         .subdevice = PCI_ANY_ID, //0x1080,
         .class = PCI_ANY_ID,
         .class_mask = PCI_ANY_ID
         },
         { 0 }
};

MODULE_DEVICE_TABLE(pci,cif50_ids);

int cif50_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
   printk("<1>Joehoe, de kernel wil me een PCI device geven!\n");
   return -1;
}

void cif50_remove(struct pci_dev *dev)
{
}

static struct pci_driver pci_driver = {
         .name = "cif50pb",
         .id_table = cif50_ids,
         .probe = cif50_probe,
         .remove = cif50_remove,
};
static int hello_init(void)
{
   printk("<1>Hello, world\n");
   return pci_register_driver(&pci_driver);
}
static void hello_exit(void)
{
   printk("<1>Goodbye cruel world\n");
   pci_unregister_driver(&pci_driver);
}
module_init(hello_init);
module_exit(hello_exit);

             reply	other threads:[~2006-04-20 14:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-20 15:04 Bert Thomas [this message]
2006-04-22  6:00 ` PCI device driver writing newbie trouble Greg KH
2006-04-23  7:50   ` Pekka Enberg
2006-04-23 16:02     ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4447A2E7.6000407@brothom.nl \
    --to=bert@brothom.nl \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox