| /* |
| Mantis PCI bridge driver |
| |
| Copyright (C) 2005, 2006 Manu Abraham (abraham.manu@gmail.com) |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| */ |
| |
| #include "mantis_common.h" |
| #include "mantis_link.h" |
| #include "mantis_hif.h" |
| |
| |
| static int mantis_ca_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long parg) |
| { |
| return 0; |
| } |
| |
| static int mantis_ca_open(struct inode *inode, struct file *file) |
| { |
| return 0; |
| } |
| |
| static int mantis_ca_release(struct inode *inode, struct file *file) |
| { |
| return 0; |
| } |
| |
| static ssize_t mantis_ca_read(struct file *file, char __user *buffer, size_t count, loff_t *ofset) |
| { |
| struct dvb_device *dvbdev = file->private_data; |
| struct mantis_ca *ca = dvbdev->priv; |
| |
| int status; |
| |
| return 0; |
| error: |
| return status; |
| } |
| |
| static ssize_t mantis_ca_write(struct file *file, const char __user *buffer, size_t count, loff_t *offset) |
| { |
| struct dvb_device *dvbdev = file->private_data; |
| struct mantis_ca *ca = dvbdev->priv; |
| |
| int status; |
| |
| return 0; |
| error: |
| return status; |
| } |
| |
| static struct file_operations mantis_fops = { |
| .owner = THIS_MODULE, |
| .ioctl = mantis_ca_ioctl, |
| .open = mantis_ca_open, |
| .release = mantis_ca_release, |
| .read = mantis_ca_read, |
| .write = mantis_ca_write, |
| }; |
| |
| static struct dvb_device mantis_ca = { |
| .priv = NULL, |
| .users = 1, |
| .readers = 1, |
| .writers = 1, |
| .fops = &mantis_fops, |
| }; |
| |
| struct dvb_device *mantis_ca_init(struct mantis_pci *mantis) |
| { |
| int ret; |
| |
| struct dvb_device *dvbdev; |
| struct dvb_adapter *dvb_adapter = &mantis->dvb_adapter; |
| struct mantis_ca *ca; |
| |
| if (!(ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL))) { |
| dprintk(verbose, MANTIS_ERROR, 1, "Out of memory!, exiting .."); |
| return NULL; |
| } |
| |
| ca->ca_priv = mantis; |
| |
| dprintk(verbose, MANTIS_ERROR, 0, "CA: Registering Mantis Adapter(%d) Slot(0)\n", mantis->num); |
| if (dvb_register_device(dvb_adapter, &dvbdev, &mantis_ca, ca, DVB_DEVICE_CA) == 0) { |
| ca->ca_dev = dvbdev; |
| mantis->mantis_ca = ca; |
| mantis_evmgr_init(ca); |
| return ca->ca_dev; |
| } |
| return 0; |
| |
| error: |
| if (ca != NULL) { |
| dprintk(verbose, MANTIS_ERROR, 1, "Error .."); |
| if (ca->ca_dev != NULL) |
| dvb_unregister_device(ca->ca_dev); |
| |
| kfree(ca); |
| } |
| return NULL; |
| } |
| |
| void mantis_ca_exit(struct mantis_pci *mantis) |
| { |
| struct mantis_ca *ca = mantis->mantis_ca; |
| |
| mantis_evmgr_exit(ca); |
| dprintk(verbose, MANTIS_ERROR, 0, "CA: Unregister Mantis Adapter(%d) Slot(0)\n", mantis->num); |
| if (ca->ca_dev) |
| dvb_unregister_device(ca->ca_dev); |
| |
| kfree(ca); |
| } |