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