On Mon, Jan 7, 2019 at 10:05 AM Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > On Mon, Jan 07, 2019 at 09:57:56AM +0100, Gerhard Khüny wrote: > > Hello, > > > > I have a question regarding the function > > serial_pci_is_class_communication() in 8250_pci: > > > > static int serial_pci_is_class_communication(struct pci_dev *dev) { > > > > /* > > * If it is not a communications device or the programming > > * interface is greater than 6, give up. > > */ > > if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) && > > ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MULTISERIAL) && > > ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) || > > (dev->class & 0xff) > 6) > > return -ENODEV; > > > > return 0; > > > > } > > > > We have implemented a serial interface in a FPGA. The existing driver > > 8250_pci is working perfect for us. Only the check using the function > > serial_pci_is_class_communication does not work since the PCI class is > > 0x05, subclass is 0x00 and programming interface is 0x00 for our > > device. > > Then fix your PCI device identifier structure :) > The problem is that the FPGA holds additional functionality (e.g. . RTC, Hex-switch,..). The device therefore is not a real serial device but it has implemented a serial interface. > > My question is, if it is the intention to exclude PCI class memory > > devices implementing a serial driver? The comment in the code could > > say something different. > > If your device says it is a memory device and not a serial device, how > could the kernel "know" it is really a serial device? > Because the init function returns no error. Why not allow memory devices also? > Please read the PCI spec for what a class device really means, and if > your device does follow the serial specification, then change your pci > device structure of your device to properly tell the host operating > system that it is a serial device. > > thanks, > > greg k-h