view TaskManager/kernel/ppe/Task.h @ 518:125a72948e44

....
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 16 Oct 2009 17:57:17 +0900
parents 4a2c9ff53605
children 5c76db2a07fa
line wrap: on
line source

#ifndef INCLUDED_TASK
#define INCLUDED_TASK

#include "base.h"
#include "types.h"
#include "ListData.h"

#define MAX_PARAMS 8

class TaskQueue;
class SchedTask;


/*!
  @class
  
  @brief

  Host に依存しない  Task 

  以下の三つの可変長データを含む 
    param
    inData
    outData 
  param は inData の最初の部分となる

  self はメインホストの中のHTaskのアドレスで、task id として使う

 */


class Task {
public: // variables

typedef void (*PostFunction)(SchedTask *s, void *read, void *write);

    BASE_NEW_DELETE(Task);

    int command;         // 4 byte
    int self;         // 4 byte

    int param_size;        // 4 byte
    int param[MAX_PARAMS]; // 4*MAX_PARAMS byte

    ListData inData  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));  // 4 byte 64bit であるべき
    ListData outData  __attribute__ ((aligned (DEFAULT_ALIGNMENT))); // 4 byte 64bit であるべき

public: // functions
    int add_inData_t(unsigned int addr, int size);  // unsigned int ではなく 64bit
    int add_outData_t(unsigned int addr, int size); // unsigned int ではなく 64bit
    int add_data(ListData &list, unsigned int addr, int size);
    int add_param(int param);
    void set_cpu(CPU_TYPE type);
    void set_post(PostFunction func, void *read, void *write);

#define add_inData(addr, size)			\
    add_inData_t((unsigned int)(addr), (size));
#define add_outData(addr, size)			\
    add_outData_t((unsigned int)(addr), (size));
};

typedef Task* TaskPtr;

#endif