Commit 1247ff5c authored by Steven Toth's avatar Steven Toth Committed by Mauro Carvalho Chehab
Browse files

[media] saa7164: monitor the RISC cpu load via a thread

parent 0b62ceb0
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -24,6 +24,31 @@

#include "saa7164.h"

int saa7164_api_get_load_info(struct saa7164_dev *dev, tmFwInfoStruct_t *i)
{
	int ret, debug;

	if (!(debug & DBGLVL_CPU))
		return 0;

	dprintk(DBGLVL_API, "%s()\n", __func__);

	i->deviceinst = 0;
	i->devicespec = 0;
	i->mode = 0;
	i->status = 0;

	ret = saa7164_cmd_send(dev, 0, GET_CUR,
		GET_FW_STATUS_CONTROL, sizeof(tmFwInfoStruct_t), i);
	if (ret != SAA_OK) {
		printk(KERN_ERR "%s() error, ret = 0x%x\n", __func__, ret);
	}

	printk(KERN_INFO "saa7164[%d]-CPU: %d percent", dev->nr, i->CPULoad);

	return ret;
}

int saa7164_api_collect_debug(struct saa7164_dev *dev)
{
	tmComResDebugGetData_t d;
+10 −0
Original line number Diff line number Diff line
@@ -1191,6 +1191,8 @@ static int saa7164_proc_create(void)
static int saa7164_thread_function(void *data)
{
	struct saa7164_dev *dev = data;
	tmFwInfoStruct_t fwinfo;
	u64 last_poll_time = 0;

	dprintk(DBGLVL_THR, "thread started\n");

@@ -1205,8 +1207,16 @@ static int saa7164_thread_function(void *data)
		dprintk(DBGLVL_THR, "thread running\n");

		/* Dump the firmware debug message to console */
		/* Polling this costs us 1-2% of the arm CPU */
		/* convert this into a respnde to interrupt 0x7a */
		saa7164_api_collect_debug(dev);

		/* Monitor CPU load every 1 second */
		if ((last_poll_time + 1000 /* ms */) < jiffies_to_msecs(jiffies)) {
			saa7164_api_get_load_info(dev, &fwinfo);
			last_poll_time = jiffies_to_msecs(jiffies);
		}

	}

	dprintk(DBGLVL_THR, "thread exiting\n");
+1 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@
#define GET_STRING_CONTROL		0x03
#define GET_LANGUAGE_CONTROL		0x05
#define SET_POWER_CONTROL		0x07
#define GET_FW_STATUS_CONTROL		0x08
#define GET_FW_VERSION_CONTROL		0x09
#define SET_DEBUG_LEVEL_CONTROL		0x0B
#define GET_DEBUG_DATA_CONTROL		0x0C
+12 −0
Original line number Diff line number Diff line
@@ -446,3 +446,15 @@ typedef struct
	u8	ucDebugData[256];
} __attribute__((packed)) tmComResDebugGetData_t;

typedef struct
{
	u32	status;
	u32	mode;
	u32	devicespec;
	u32	deviceinst;
	u32	CPULoad;
	u32	RemainHeap;
	u32	CPUClock;
	u32	RAMSpeed;
} __attribute__((packed)) tmFwInfoStruct_t;
+2 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@
#define DBGLVL_ENC 1024
#define DBGLVL_VBI 2048
#define DBGLVL_THR 4096
#define DBGLVL_CPU 8192

#define SAA7164_NORMS ( V4L2_STD_NTSC_M |  V4L2_STD_NTSC_M_JP |  V4L2_STD_NTSC_443 )

@@ -551,6 +552,7 @@ int saa7164_api_get_videomux(struct saa7164_port *port);
int saa7164_api_set_vbi_format(struct saa7164_port *port);
int saa7164_api_set_debug(struct saa7164_dev *dev, u8 level);
int saa7164_api_collect_debug(struct saa7164_dev *dev);
int saa7164_api_get_load_info(struct saa7164_dev *dev, tmFwInfoStruct_t *i);

/* ----------------------------------------------------------- */
/* saa7164-cards.c                                             */