Skip to content

Commit

Permalink
ipmi_si: Rework some include files
Browse files Browse the repository at this point in the history
ipmi_si_sm.h was getting included in lots of places it didn't
belong.  Rework things a bit to remove all the dependencies,
mostly just moving things between include files that were in
the wrong place and removing bogus includes.

Signed-off-by: Corey Minyard <[email protected]>
  • Loading branch information
cminyard committed Aug 2, 2019
1 parent cbb19cb commit 104fb25
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 59 deletions.
1 change: 0 additions & 1 deletion drivers/char/ipmi/ipmi_dmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <linux/dmi.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include "ipmi_si_sm.h"
#include "ipmi_dmi.h"
#include "ipmi_plat_data.h"

Expand Down
1 change: 1 addition & 0 deletions drivers/char/ipmi/ipmi_dmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/*
* DMI defines for use by IPMI
*/
#include "ipmi_si.h"

#ifdef CONFIG_IPMI_DMI_DECODE
int ipmi_dmi_get_slave_addr(enum si_type si_type, unsigned int space,
Expand Down
57 changes: 55 additions & 2 deletions drivers/char/ipmi/ipmi_si.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,65 @@
* etc) to the base ipmi system interface code.
*/

#ifndef __IPMI_SI_H__
#define __IPMI_SI_H__

#include <linux/ipmi.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include "ipmi_si_sm.h"

#define SI_DEVICE_NAME "ipmi_si"

#define DEFAULT_REGSPACING 1
#define DEFAULT_REGSIZE 1

#define DEVICE_NAME "ipmi_si"
enum si_type {
SI_TYPE_INVALID, SI_KCS, SI_SMIC, SI_BT
};

enum ipmi_addr_space {
IPMI_IO_ADDR_SPACE, IPMI_MEM_ADDR_SPACE
};

/*
* The structure for doing I/O in the state machine. The state
* machine doesn't have the actual I/O routines, they are done through
* this interface.
*/
struct si_sm_io {
unsigned char (*inputb)(const struct si_sm_io *io, unsigned int offset);
void (*outputb)(const struct si_sm_io *io,
unsigned int offset,
unsigned char b);

/*
* Generic info used by the actual handling routines, the
* state machine shouldn't touch these.
*/
void __iomem *addr;
unsigned int regspacing;
unsigned int regsize;
unsigned int regshift;
enum ipmi_addr_space addr_space;
unsigned long addr_data;
enum ipmi_addr_src addr_source; /* ACPI, PCI, SMBIOS, hardcode, etc. */
void (*addr_source_cleanup)(struct si_sm_io *io);
void *addr_source_data;
union ipmi_smi_info_union addr_info;

int (*io_setup)(struct si_sm_io *info);
void (*io_cleanup)(struct si_sm_io *info);
unsigned int io_size;

int irq;
int (*irq_setup)(struct si_sm_io *io);
void *irq_handler_data;
void (*irq_cleanup)(struct si_sm_io *io);

u8 slave_addr;
enum si_type si_type;
struct device *dev;
};

int ipmi_si_add_smi(struct si_sm_io *io);
irqreturn_t ipmi_si_irq_handler(int irq, void *data);
Expand Down Expand Up @@ -50,3 +101,5 @@ static inline void ipmi_si_parisc_shutdown(void) { }

int ipmi_si_port_setup(struct si_sm_io *io);
int ipmi_si_mem_setup(struct si_sm_io *io);

#endif /* __IPMI_SI_H__ */
5 changes: 3 additions & 2 deletions drivers/char/ipmi/ipmi_si_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include <linux/ipmi.h>
#include <linux/ipmi_smi.h>
#include "ipmi_si.h"
#include "ipmi_si_sm.h"
#include <linux/string.h>
#include <linux/ctype.h>

Expand Down Expand Up @@ -1266,12 +1267,12 @@ int ipmi_std_irq_setup(struct si_sm_io *io)
rv = request_irq(io->irq,
ipmi_si_irq_handler,
IRQF_SHARED,
DEVICE_NAME,
SI_DEVICE_NAME,
io->irq_handler_data);
if (rv) {
dev_warn(io->dev, "%s unable to claim interrupt %d,"
" running polled\n",
DEVICE_NAME, io->irq);
SI_DEVICE_NAME, io->irq);
io->irq = 0;
} else {
io->irq_cleanup = std_irq_cleanup;
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/ipmi/ipmi_si_mem_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ int ipmi_si_mem_setup(struct si_sm_io *io)
*/
for (idx = 0; idx < io->io_size; idx++) {
if (request_mem_region(addr + idx * io->regspacing,
io->regsize, DEVICE_NAME) == NULL) {
io->regsize, SI_DEVICE_NAME) == NULL) {
/* Undo allocations */
mem_region_cleanup(io, idx);
return -EIO;
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/ipmi/ipmi_si_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ static const struct pci_device_id ipmi_pci_devices[] = {
MODULE_DEVICE_TABLE(pci, ipmi_pci_devices);

static struct pci_driver ipmi_pci_driver = {
.name = DEVICE_NAME,
.name = SI_DEVICE_NAME,
.id_table = ipmi_pci_devices,
.probe = ipmi_pci_probe,
.remove = ipmi_pci_remove,
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/ipmi/ipmi_si_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ static const struct platform_device_id si_plat_ids[] = {

struct platform_driver ipmi_platform_driver = {
.driver = {
.name = DEVICE_NAME,
.name = SI_DEVICE_NAME,
.of_match_table = of_ipmi_match,
.acpi_match_table = ACPI_PTR(acpi_ipmi_match),
},
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/ipmi/ipmi_si_port_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ int ipmi_si_port_setup(struct si_sm_io *io)
*/
for (idx = 0; idx < io->io_size; idx++) {
if (request_region(addr + idx * io->regspacing,
io->regsize, DEVICE_NAME) == NULL) {
io->regsize, SI_DEVICE_NAME) == NULL) {
/* Undo allocations */
while (idx--)
release_region(addr + idx * io->regspacing,
Expand Down
54 changes: 5 additions & 49 deletions drivers/char/ipmi/ipmi_si_sm.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,62 +14,17 @@
* Copyright 2002 MontaVista Software Inc.
*/

#include <linux/ipmi.h>
#ifndef __IPMI_SI_SM_H__
#define __IPMI_SI_SM_H__

#include "ipmi_si.h"

/*
* This is defined by the state machines themselves, it is an opaque
* data type for them to use.
*/
struct si_sm_data;

enum si_type {
SI_TYPE_INVALID, SI_KCS, SI_SMIC, SI_BT
};

enum ipmi_addr_space {
IPMI_IO_ADDR_SPACE, IPMI_MEM_ADDR_SPACE
};

/*
* The structure for doing I/O in the state machine. The state
* machine doesn't have the actual I/O routines, they are done through
* this interface.
*/
struct si_sm_io {
unsigned char (*inputb)(const struct si_sm_io *io, unsigned int offset);
void (*outputb)(const struct si_sm_io *io,
unsigned int offset,
unsigned char b);

/*
* Generic info used by the actual handling routines, the
* state machine shouldn't touch these.
*/
void __iomem *addr;
unsigned int regspacing;
unsigned int regsize;
unsigned int regshift;
enum ipmi_addr_space addr_space;
unsigned long addr_data;
enum ipmi_addr_src addr_source; /* ACPI, PCI, SMBIOS, hardcode, etc. */
void (*addr_source_cleanup)(struct si_sm_io *io);
void *addr_source_data;
union ipmi_smi_info_union addr_info;

int (*io_setup)(struct si_sm_io *info);
void (*io_cleanup)(struct si_sm_io *info);
unsigned int io_size;

int irq;
int (*irq_setup)(struct si_sm_io *io);
void *irq_handler_data;
void (*irq_cleanup)(struct si_sm_io *io);

u8 slave_addr;
enum si_type si_type;
struct device *dev;
};

/* Results of SMI events. */
enum si_sm_result {
SI_SM_CALL_WITHOUT_DELAY, /* Call the driver again immediately */
Expand Down Expand Up @@ -146,3 +101,4 @@ extern const struct si_sm_handlers kcs_smi_handlers;
extern const struct si_sm_handlers smic_smi_handlers;
extern const struct si_sm_handlers bt_smi_handlers;

#endif /* __IPMI_SI_SM_H__ */
1 change: 0 additions & 1 deletion drivers/char/ipmi/ipmi_ssif.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
#include <linux/acpi.h>
#include <linux/ctype.h>
#include <linux/time64.h>
#include "ipmi_si_sm.h"
#include "ipmi_dmi.h"

#define DEVICE_NAME "ipmi_ssif"
Expand Down

0 comments on commit 104fb25

Please sign in to comment.