Bom dia,<br><br>Se alguém pudem me ajudar com as informações abaixo que realmente não entendo o porque de tantos erros na compilação.<br><br>[root@localhost ltmodem-2.6-alk-7]# make<br>make -C /lib/modules/2.6.18-1.2798.fc6
/build SUBDIRS=/home/papai/programas/modem/ltmodem-2.6-alk-7 modules<br>make[1]: Entrando no diretório `/usr/src/kernels/2.6.18-1.2798.fc6-i586'<br> CC [M] /home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.o<br>/home/papai/programas/modem/ltmodem-
2.6-alk-7/lt_modem.c:116: error: expected ')' before string constant<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c:118: error: expected ')' before string constant<br>/home/papai/programas/modem/ltmodem-2.6-alk-7
/lt_modem.c:123: error: expected ')' before string constant<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c: In function 'lt_pci_find_device':<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c:160: error: 'PCI_DEVICE_ID_ATT_L56XMF' undeclared (first use in this function)
<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c:160: error: (Each undeclared identifier is reported only once<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c:160: error: for each function it appears in.)
<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c: In function 'lt_get_modem_interface':<br>/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.c:308: warning: assignment from incompatible pointer type<br>/home/papai/programas/modem/ltmodem-
2.6-alk-7/lt_modem.c:317: warning: assignment from incompatible pointer type<br>make[2]: ** [/home/papai/programas/modem/ltmodem-2.6-alk-7/lt_modem.o] Erro 1<br>make[1]: ** [_module_/home/papai/programas/modem/ltmodem-2.6-alk-7
] Erro 2<br>make[1]: Saindo do diretório `/usr/src/kernels/2.6.18-1.2798.fc6-i586'<br>make: ** [module] Erro 2<br><br>*******************************************<br><br>Arquivo ltmodem.c<br><br>/*<br> * UNOFFICIAL BUT WORKING LTMODEM DRIVER for
2.6.x Linux kernels<br> * based on original code released by Agere Systems Inc.<br> */<br>/****************************************************************<br> * File : ltmodem.c<br> *<br> * Copyright (C) 1999, 2000, 2001 Lucent Technologies Inc.
<br> * Copyright (C) 2001, 2002, 2003 Agere Systems Inc. All rights reserved.<br> *<br> *<br> * Description :<br> * Contains the interface functions for Linux<br> *<br> ****************************************************************/
<br>/****************************************************************<br>MRS changes<br>- support for 2.2 and 2.4 kernels in same file<br>- support for override vendor and device id's<br>- fixups to remove warnings from compile
<br> some return valuse not supplied. various statics removed<br> in NOEEPROM ifdef to be consistent with other part<br> <br> - PCI support for kernel 2.5 (c) Jason Hall<br> - minor 2.6 simplification by Aleksey Kondratenko.
<br> Now it supports 2.6 only.<br>****************************************************************/<br>#include <linux/version.h><br><br>#include <linux/module.h><br>#include <linux/init.h><br><br>#include <linux/sched.h> // in order to get jiffies
<br>#include <linux/param.h> // in order to get HZ<br>#include <linux/pci.h> // pci functions<br>#include <linux/time.h><br>#include <asm/io.h><br>#include "linuxif.h"<br><br>#ifndef MODULE
<br>#error this code cannot be the part of Linux kernel<br>#endif<br><br>static char *modem_name = "Lucent Modem Controller driver";<br>static char *modem_version = "8.26-alk";<br>extern int eeprom_flag;
<br> <br>struct timer_list timerList;<br>asmlinkage int (*lt_rs_interrupt)(void);<br><br>spinlock_t modem_driver_lock = SPIN_LOCK_UNLOCKED;<br><br>asmlinkage<br>void *ltmodem_memset(void *p, int val, size_t cnt)<br>{<br> /* printk(KERN_INFO "ltmodem_memset called\n"); */
<br> return memset(p,val,cnt);<br>}<br><br>/* define pci config access function */<br>LT_DEFINE_PCI_OP(read, byte, char *)<br>LT_DEFINE_PCI_OP(read, word, short *)<br>LT_DEFINE_PCI_OP(read, dword, int *)<br>LT_DEFINE_PCI_OP(write, byte, char)
<br>LT_DEFINE_PCI_OP(write, word, short)<br>LT_DEFINE_PCI_OP(write, dword, int)<br><br>asmlinkage<br>byte Get_PCI_INTERRUPT_LINE(void)<br>{<br> return PCI_INTERRUPT_LINE;<br>}<br><br>asmlinkage<br>byte Get_PCI_BASE_ADDRESS_1(void)
<br>{<br> return PCI_BASE_ADDRESS_1;<br>}<br><br>asmlinkage<br>byte Get_PCI_BASE_ADDRESS_2(void)<br>{<br> return PCI_BASE_ADDRESS_2;<br>}<br><br>asmlinkage<br>dword Get_PCI_BASE_ADDRESS_IO_MASK(void)<br>{<br> return PCI_BASE_ADDRESS_IO_MASK;
<br>}<br><br>asmlinkage<br>byte Get_PCI_BASE_ADDRESS_SPACE_IO(void)<br>{<br> return PCI_BASE_ADDRESS_SPACE_IO;<br>}<br><br>asmlinkage<br>BOOL lt_pci_present(void)<br>{<br> return 1;<br>}<br><br>static<br>struct PCI_IDs {
<br> int vendor_id;<br> int device_id_start;<br> int device_id_last;<br>} pci_ids[] = {<br> {0x115d, 0x0010, 0x03ff}<br>};<br><br>static int vendor_id = 0;<br>static int device_id = 0;<br><br>Obs: Linha 116 - MODULE_PARM(vendor_id, "i");
<br>MODULE_PARM_DESC(vendor_id, "Vendor ID of the Lucent Modem e.g. vendor_id=0x11c1");<br>Obs: Linha 118 - MODULE_PARM(device_id, "i");<br>MODULE_PARM_DESC(device_id, "Device ID of the Lucent Modem
e.g. device_id=0x0440");<br><br>static int Forced[4] = {-1,-1,-1,0};<br><br>Obs: Linha 123 - MODULE_PARM(Forced, "4i");<br>MODULE_PARM_DESC(Forced, "Forced Irq,BaseAddress,ComAddress[,NoDetect] of the Lucent Modem
e.g. Forced=3,0x130,0x2f8");<br><br>static<br>struct pci_dev *__find_device(struct lt_pci_dev_info *lt_dev, unsigned int id, unsigned int num)<br>{<br> int i;<br> struct pci_dev *dev = pci_get_device(id,num,0);
<br> if (!dev || pci_enable_device(dev) < 0 || !dev->irq)<br> return 0;<br> lt_dev->irq = dev->irq;<br> lt_dev->vendor = dev->vendor;<br> lt_dev->device = dev->device;<br> lt_dev->devfn = dev->devfn;
<br> lt_dev->bus_num = dev->bus->number;<br> lt_dev->subsystem_vendor = dev->subsystem_vendor;<br> lt_dev->subsystem_device = dev->subsystem_device;<br> for (i=0;i<6;i++) {<br> lt_dev->Base_Address[i] = dev->resource[i].start;
<br> if (dev->resource[i].start)<br> lt_dev->Base_Address[i] |= dev->resource[i].flags & 1;<br> }<br> return dev;<br>}<br><br>static<br>struct pci_dev *detected_pci_dev;<br><br>asmlinkage
<br>BOOL lt_pci_find_device(struct lt_pci_dev_info *lt_dev, unsigned int id, unsigned int num)<br>{<br> if (detected_pci_dev)<br> pci_dev_put(detected_pci_dev);<br><br> if ((detected_pci_dev = __find_device(lt_dev,id,num)))
<br> return TRUE;<br><br> if (id == PCI_VENDOR_ID_ATT && num == PCI_DEVICE_ID_ATT_L56XMF) {<br> int i;<br> for (i=0;i<sizeof(pci_ids)/sizeof(pci_ids[0]);i++) {<br> int devid;<br>
for (devid=pci_ids[i].device_id_start;devid <= pci_ids[i].device_id_last; devid++)<br> if ((detected_pci_dev = __find_device(lt_dev, pci_ids[i].vendor_id, devid)))<br> return TRUE;
<br> }<br> if (vendor_id && device_id && (detected_pci_dev == __find_device(lt_dev, vendor_id, device_id)))<br> return TRUE;<br> }<br> return FALSE;<br>}<br><br>static<br>void lt_put_pci_dev(void)
<br>{<br> if (detected_pci_dev)<br> pci_dev_put(detected_pci_dev);<br> detected_pci_dev = 0;<br>}<br><br>static<br>void __timer_wrapper(unsigned long data)<br>{<br> ((void (asmlinkage *)(unsigned long))data)(0);
<br>}<br><br>asmlinkage<br>void lt_add_timer(void (asmlinkage *timerfunction)(unsigned long))<br>{<br> timerList.expires = jiffies+HZ/100; // 10ms delay<br> timerList.function = __timer_wrapper;<br> timerList.data
= (unsigned long)timerfunction;<br> add_timer(&timerList);<br>}<br><br>asmlinkage<br>dword VMODEM_Get_System_Time(void)<br>{<br> struct timeval time;<br> // TODO: investigate if it is safe to call gettimeofday from bh context
<br> do_gettimeofday(&time);<br> return time.tv_usec/1000 + time.tv_sec*1000;<br>}<br><br>asmlinkage<br>void lt_init_timer(void)<br>{<br> init_timer(&timerList);<br>}<br><br>asmlinkage<br>byte inp(word addr)
<br>{<br> return inb(addr);<br>}<br><br>asmlinkage<br>void outp(word addr, byte value)<br>{<br> outb(value, addr);<br>}<br><br>asmlinkage<br>word inpw(word addr)<br>{<br> return inw(addr);<br>}<br><br>asmlinkage<br>
void outpw(word addr, word value)<br>{<br> return outw(value, addr);<br>}<br><br>asmlinkage<br>dword inpd(word addr)<br>{<br> return inl(addr);<br>}<br><br>asmlinkage<br>void outpd(word addr, dword value)<br>{<br> return outl(value, addr);
<br>}<br><br><br>asmlinkage<br>byte dp_regread(byte reg)<br>{<br> unsigned long flags;<br> byte ret;<br> spin_lock_irqsave(&modem_driver_lock, flags);<br> ret = dp_regread_nonint (reg);<br> spin_unlock_irqrestore(&modem_driver_lock, flags);
<br> return ret;<br>}<br><br>asmlinkage<br>void dp_regwrite(byte reg, byte value)<br>{<br> unsigned long flags = 0;<br> spin_lock_irqsave(&modem_driver_lock, flags);<br> dp_regwrite_nonint(reg, value);<br>
spin_unlock_irqrestore(&modem_driver_lock, flags);<br>}<br><br>static<br>byte modemPortOpen(void)<br>{<br> return vxdPortOpen();<br>}<br><br>static<br>byte modemPortClose(void)<br>{<br> vxdPortClose();<br> return 0;
<br>}<br><br>int lt_lucent_detect_modem(struct ltmodem_res *pltmodem_res)<br>{<br> int val = 0;<br> if (!Forced[3]) {<br> val = lucent_detect_modem(pltmodem_res);<br> if (val)<br> lt_put_pci_dev();
<br> else<br> printk(KERN_INFO "Detected Parameters Irq=%d BaseAddress=0x%x ComAddress=0x%x\n",<br> Irq,BaseAddress,ComAddress);<br> }<br> if (Forced[0]>0 && Forced[1]>0 && Forced[2]>0) {
<br> Irq = pltmodem_res->Irq = Forced[0];<br> BaseAddress = pltmodem_res->BaseAddress = Forced[1];<br> ComAddress = Forced[2];<br> printk(KERN_INFO "Forced Parameters Irq=%d BaseAddress=0x%x ComAddress=0x%x\n",
<br> Irq,BaseAddress,ComAddress);<br> // fake it<br> val = 0;<br> }<br> return val;<br>}<br><br>int lt_get_modem_interface(struct ltmodem_ops *ops)<br>{<br> ops->detect_modem = lt_lucent_detect_modem;
<br> ops->init_modem = lucent_init_modem;<br> ops->PortOpen = modemPortOpen;<br> ops->PortClose = modemPortClose;<br> ops->read_vuart_register = read_vuart_port;<br> ops->write_vuart_register = write_vuart_port;
<br> ops->app_ioctl_handler = app_ioctl_handler;<br> ops->dsp_isr = dp_dsp_isr;<br> ops->put_pci_dev = lt_put_pci_dev;<br> ops->io_lock = &modem_driver_lock;<br> ops->virtual_isr_ptr = <_rs_interrupt;
<br> return 0;<br>}<br>EXPORT_SYMBOL(lt_get_modem_interface);<br><br>/* broken, unused */<br>/* <br> * struct pci_dev *lt_get_dev(void)<br> * {<br> * static struct pci_dev *correct_dev;<br> * if (unlikely(!correct_dev))
<br> * correct_dev = dev;<br> * return correct_dev;<br> * }<br> * EXPORT_SYMBOL(lt_get_dev);<br> */<br><br>int __init lm_init_module(void)<br>{<br> extern byte eeprom[];<br> printk(KERN_INFO "Loading %s version %s\n", modem_name, modem_version);
<br> eeprom_flag = 0;<br> eeprom[0] = LT_COUNTRY_ID; // set the country ID for the Lucent modem<br> return 0;<br>}<br><br>void __exit lm_cleanup_module(void)<br>{<br> printk(KERN_INFO "Unloading %s: version %s\n", modem_name, modem_version);
<br>}<br><br>module_init(lm_init_module);<br>module_exit(lm_cleanup_module);<br>MODULE_DESCRIPTION("Lucent/Agere linmodem controller driver");<br>MODULE_LICENSE("Proprietary");<br><br>void lin_kill(void) {}
<br>void lin_wake_up(void) {}<br>void lin_interruptible_sleep_on(void) {}<br>int lin_signal_pending(void) {return 0;}<br>int function_1(int (*fn)(void *), char *a) {return 0;}<br>int function_2(char *p) {return 0;}<br><br>
Não sei mais o que fazer para colocar meu modem para funcionar.<br><br>PS: No Fedora Core 4 eu consigo colocar o modem para funcionar com o arquivo ltmodem-8.26b1.tar.gz. Inclusive fiz o upgrade do FC4 para o FC6 e aparece erro no udev[351]: add_to_rules: invalid KERNEL operation ..... (não consegui copiar o resto). abaixo o
udev.rules<br>#<br># UDEV rule for ltmodem, in /etc/udev/rules.d/ltmodem.rules<br># creates symlink /dev/modem to /dev/ttyLTM0, and sets permissions.<br>KERNEL="ttyLTM[0-9]", NAME="%k", MODE="0660", GROUP="uucp", SYMLINK="modem"
<br># to restrict to a single USER add above , OWNER="USERNAME"<br><br>Grato<br><br>Júlio César<br>