int __init init_module(void) { int cmd, i, flags; struct resource * r; inPos_device = pci_get_device(PCI_VENDOR_ID_ALTERA, PCI_DEVICE_ID_CYCLONE_IV, inPos_device); if (!inPos_device) { printk(KERN_ALERT "ERROR - Device register failed, no such device\n"); return -ENODEV; } pci_read_config_word(inPos_device, PCI_COMMAND, &cmd); /* Set flags */ set_command_flag(&cmd, PCI_COMMAND_MEMORY); /* Enable response in Memory space */ set_command_flag(&cmd, PCI_COMMAND_MASTER); /* Enable bus mastering */ set_command_flag(&cmd, PCI_COMMAND_INVALIDATE); /* Use memory write and invalidate */ if (!dma_set_mask(&inPos_device->dev, 0xffffffff)) { printk (KERN_ALERT "DMA 32-bit not supported\n"); return -ENOTSUPP; } /* Find desired region */ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { region.size = pci_resource_len(inPos_device, i); region.phys_addr = pci_resource_start(inPos_device, i); flags = pci_resource_flags(inPos_device, i); if (!(flags & IORESOURCE_IO || region.size)) // is not IO and has size > 0 continue; if ((region.size >= sizeof(struct PhysImg)) && !(flags & IORESOURCE_READONLY)) { region.resource_num = i; break; } } if (region.resource_num < 0) { printk(KERN_ALERT "ERROR - Device memory region with size >= %d not found!\n", sizeof(struct PhysImg)); return -EINVAL; } region.phys_addr &= PCI_BASE_ADDRESS_MEM_MASK; region.size = ~(region.size & PCI_BASE_ADDRESS_MEM_MASK) + 1; dev_major = register_chrdev(IN_POS_MAJOR, name, &fops); if (dev_major < 0) { printk(KERN_ALERT "ERROR - Device register failed with code: %d\n", dev_major); return dev_major; } return 0; }
void parrot_ardrone_ctrl_set_command_flag(int32_t control_mode, bool_t enable) { set_command_flag(control_mode, enable); }