mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
[S390] qdio: remove API wrappers
Remove qdio API wrappers used by qeth and replace them by calling the appropriate functions directly. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
d0c9d4a89f
commit
cc961d400e
@ -368,14 +368,12 @@ struct qdio_initialize {
|
|||||||
#define QDIO_FLAG_SYNC_OUTPUT 0x02
|
#define QDIO_FLAG_SYNC_OUTPUT 0x02
|
||||||
#define QDIO_FLAG_PCI_OUT 0x10
|
#define QDIO_FLAG_PCI_OUT 0x10
|
||||||
|
|
||||||
extern int qdio_initialize(struct qdio_initialize *);
|
|
||||||
extern int qdio_allocate(struct qdio_initialize *);
|
extern int qdio_allocate(struct qdio_initialize *);
|
||||||
extern int qdio_establish(struct qdio_initialize *);
|
extern int qdio_establish(struct qdio_initialize *);
|
||||||
extern int qdio_activate(struct ccw_device *);
|
extern int qdio_activate(struct ccw_device *);
|
||||||
|
|
||||||
extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags,
|
extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags,
|
||||||
int q_nr, unsigned int bufnr, unsigned int count);
|
int q_nr, unsigned int bufnr, unsigned int count);
|
||||||
extern int qdio_cleanup(struct ccw_device*, int);
|
|
||||||
extern int qdio_shutdown(struct ccw_device*, int);
|
extern int qdio_shutdown(struct ccw_device*, int);
|
||||||
extern int qdio_free(struct ccw_device *);
|
extern int qdio_free(struct ccw_device *);
|
||||||
extern int qdio_get_ssqd_desc(struct ccw_device *dev, struct qdio_ssqd_desc*);
|
extern int qdio_get_ssqd_desc(struct ccw_device *dev, struct qdio_ssqd_desc*);
|
||||||
|
@ -1023,30 +1023,6 @@ int qdio_get_ssqd_desc(struct ccw_device *cdev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc);
|
EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc);
|
||||||
|
|
||||||
/**
|
|
||||||
* qdio_cleanup - shutdown queues and free data structures
|
|
||||||
* @cdev: associated ccw device
|
|
||||||
* @how: use halt or clear to shutdown
|
|
||||||
*
|
|
||||||
* This function calls qdio_shutdown() for @cdev with method @how.
|
|
||||||
* and qdio_free(). The qdio_free() return value is ignored since
|
|
||||||
* !irq_ptr is already checked.
|
|
||||||
*/
|
|
||||||
int qdio_cleanup(struct ccw_device *cdev, int how)
|
|
||||||
{
|
|
||||||
struct qdio_irq *irq_ptr = cdev->private->qdio_data;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (!irq_ptr)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
rc = qdio_shutdown(cdev, how);
|
|
||||||
|
|
||||||
qdio_free(cdev);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(qdio_cleanup);
|
|
||||||
|
|
||||||
static void qdio_shutdown_queues(struct ccw_device *cdev)
|
static void qdio_shutdown_queues(struct ccw_device *cdev)
|
||||||
{
|
{
|
||||||
struct qdio_irq *irq_ptr = cdev->private->qdio_data;
|
struct qdio_irq *irq_ptr = cdev->private->qdio_data;
|
||||||
@ -1163,28 +1139,6 @@ int qdio_free(struct ccw_device *cdev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qdio_free);
|
EXPORT_SYMBOL_GPL(qdio_free);
|
||||||
|
|
||||||
/**
|
|
||||||
* qdio_initialize - allocate and establish queues for a qdio subchannel
|
|
||||||
* @init_data: initialization data
|
|
||||||
*
|
|
||||||
* This function first allocates queues via qdio_allocate() and on success
|
|
||||||
* establishes them via qdio_establish().
|
|
||||||
*/
|
|
||||||
int qdio_initialize(struct qdio_initialize *init_data)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = qdio_allocate(init_data);
|
|
||||||
if (rc)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
rc = qdio_establish(init_data);
|
|
||||||
if (rc)
|
|
||||||
qdio_free(init_data->cdev);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(qdio_initialize);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qdio_allocate - allocate qdio queues and associated data
|
* qdio_allocate - allocate qdio queues and associated data
|
||||||
* @init_data: initialization data
|
* @init_data: initialization data
|
||||||
|
@ -1292,13 +1292,14 @@ int qeth_qdio_clear_card(struct qeth_card *card, int use_halt)
|
|||||||
QETH_QDIO_CLEANING)) {
|
QETH_QDIO_CLEANING)) {
|
||||||
case QETH_QDIO_ESTABLISHED:
|
case QETH_QDIO_ESTABLISHED:
|
||||||
if (card->info.type == QETH_CARD_TYPE_IQD)
|
if (card->info.type == QETH_CARD_TYPE_IQD)
|
||||||
rc = qdio_cleanup(CARD_DDEV(card),
|
rc = qdio_shutdown(CARD_DDEV(card),
|
||||||
QDIO_FLAG_CLEANUP_USING_HALT);
|
QDIO_FLAG_CLEANUP_USING_HALT);
|
||||||
else
|
else
|
||||||
rc = qdio_cleanup(CARD_DDEV(card),
|
rc = qdio_shutdown(CARD_DDEV(card),
|
||||||
QDIO_FLAG_CLEANUP_USING_CLEAR);
|
QDIO_FLAG_CLEANUP_USING_CLEAR);
|
||||||
if (rc)
|
if (rc)
|
||||||
QETH_DBF_TEXT_(TRACE, 3, "1err%d", rc);
|
QETH_DBF_TEXT_(TRACE, 3, "1err%d", rc);
|
||||||
|
qdio_free(CARD_DDEV(card));
|
||||||
atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED);
|
atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED);
|
||||||
break;
|
break;
|
||||||
case QETH_QDIO_CLEANING:
|
case QETH_QDIO_CLEANING:
|
||||||
@ -3810,10 +3811,18 @@ static int qeth_qdio_establish(struct qeth_card *card)
|
|||||||
|
|
||||||
if (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_ALLOCATED,
|
if (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_ALLOCATED,
|
||||||
QETH_QDIO_ESTABLISHED) == QETH_QDIO_ALLOCATED) {
|
QETH_QDIO_ESTABLISHED) == QETH_QDIO_ALLOCATED) {
|
||||||
rc = qdio_initialize(&init_data);
|
rc = qdio_allocate(&init_data);
|
||||||
if (rc)
|
if (rc) {
|
||||||
atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED);
|
atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
rc = qdio_establish(&init_data);
|
||||||
|
if (rc) {
|
||||||
|
atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED);
|
||||||
|
qdio_free(CARD_DDEV(card));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
kfree(out_sbal_ptrs);
|
kfree(out_sbal_ptrs);
|
||||||
kfree(in_sbal_ptrs);
|
kfree(in_sbal_ptrs);
|
||||||
kfree(qib_param_field);
|
kfree(qib_param_field);
|
||||||
|
Loading…
Reference in New Issue
Block a user